Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision c3f551b18c5d80e2da2c29a58e317fefbf1dc172)
+++ src/InitTweak/InitTweak.cc	(revision 0a6aad4aa53e854b5b0a43ec60d74add61bb90a4)
@@ -307,14 +307,12 @@
 	}
 
-	class CallFinder : public Visitor {
-	public:
-		typedef Visitor Parent;
+	struct CallFinder {
 		CallFinder( const std::list< std::string > & names ) : names( names ) {}
 
-		virtual void visit( ApplicationExpr * appExpr ) {
+		void postvisit( ApplicationExpr * appExpr ) {
 			handleCallExpr( appExpr );
 		}
 
-		virtual void visit( UntypedExpr * untypedExpr ) {
+		void postvisit( UntypedExpr * untypedExpr ) {
 			handleCallExpr( untypedExpr );
 		}
@@ -326,5 +324,4 @@
 		template< typename CallExpr >
 		void handleCallExpr( CallExpr * expr ) {
-			Parent::visit( expr );
 			std::string fname = getFunctionName( expr );
 			if ( std::find( names.begin(), names.end(), fname ) != names.end() ) {
@@ -335,6 +332,6 @@
 
 	void collectCtorDtorCalls( Statement * stmt, std::list< Expression * > & matches ) {
-		static CallFinder finder( std::list< std::string >{ "?{}", "^?{}" } );
-		finder.matches = &matches;
+		static PassVisitor<CallFinder> finder( std::list< std::string >{ "?{}", "^?{}" } );
+		finder.pass.matches = &matches;
 		maybeAccept( stmt, finder );
 	}
