Index: src/ResolvExpr/Alternative.cc
===================================================================
--- src/ResolvExpr/Alternative.cc	(revision b69233aced1c8e524868a8ea35b14931e9676cf1)
+++ src/ResolvExpr/Alternative.cc	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
@@ -125,17 +125,4 @@
 	}
 
-	void splice( AltList& dst, AltList& src ) {
-		dst.reserve( dst.size() + src.size() );
-		for ( Alternative& alt : src ) {
-			dst.push_back( std::move(alt) );
-		}
-		src.clear();
-	}
-
-	void spliceBegin( AltList& dst, AltList& src ) {
-		splice( src, dst );
-		dst.swap( src );
-	}
-
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/Alternative.h
===================================================================
--- src/ResolvExpr/Alternative.h	(revision b69233aced1c8e524868a8ea35b14931e9676cf1)
+++ src/ResolvExpr/Alternative.h	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
@@ -112,10 +112,4 @@
 	typedef std::vector< Alternative > AltList;
 
-	/// Moves all elements from src to the end of dst
-	void splice( AltList& dst, AltList& src );
-
-	/// Moves all elements from src to the beginning of dst
-	void spliceBegin( AltList& dst, AltList& src );
-
 	static inline std::ostream & operator<<(std::ostream & os, const ResolvExpr::Alternative & alt) {
 		alt.print( os );
Index: src/ResolvExpr/Candidate.hpp
===================================================================
--- src/ResolvExpr/Candidate.hpp	(revision b69233aced1c8e524868a8ea35b14931e9676cf1)
+++ src/ResolvExpr/Candidate.hpp	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
@@ -75,17 +75,4 @@
 using CandidateList = std::vector< CandidateRef >;
 
-/// Splice src after dst, clearing src
-static inline void splice( CandidateList & dst, CandidateList & src ) {
-	dst.reserve( dst.size() + src.size() );
-	for ( CandidateRef & r : src ) { dst.emplace_back( std::move( r ) ); }
-	src.clear();
-}
-
-/// Splice src before dst
-static inline void spliceBegin( CandidateList & dst, CandidateList & src ) {
-	splice( src, dst );
-	dst.swap( src );
-}
-
 /// Sum the cost of a list of candidates
 static inline Cost sumCost( const CandidateList & candidates ) {
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision b69233aced1c8e524868a8ea35b14931e9676cf1)
+++ src/ResolvExpr/Resolver.cc	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
@@ -1253,4 +1253,12 @@
 	}
 
+	ast::ptr< ast::Init > resolveCtorInit( 
+		const ast::ConstructorInit * ctorInit, const ast::SymbolTable & symtab 
+	) {
+		assert( ctorInit );
+		ast::Pass< Resolver_new > resolver{ symtab };
+		return ctorInit->accept( resolver );
+	}
+
 	ast::ptr< ast::Expr > resolveStmtExpr( 
 		const ast::StmtExpr * stmtExpr, const ast::SymbolTable & symtab 
Index: src/ResolvExpr/Resolver.h
===================================================================
--- src/ResolvExpr/Resolver.h	(revision b69233aced1c8e524868a8ea35b14931e9676cf1)
+++ src/ResolvExpr/Resolver.h	(revision 234b1cb4afd88ccf2b1f3e001a2eae5dc12ca39b)
@@ -29,6 +29,8 @@
 
 namespace ast {
+	class ConstructorInit;
 	class Decl;
 	class DeletedExpr;
+	class Init;
 	class StmtExpr;
 	class SymbolTable;
@@ -59,4 +61,7 @@
 	ast::ptr< ast::Expr > resolveInVoidContext(
 		const ast::Expr * expr, const ast::SymbolTable & symtab, ast::TypeEnvironment & env );
+	/// Resolves a constructor init expression
+	ast::ptr< ast::Init > resolveCtorInit( 
+		const ast::ConstructorInit * ctorInit, const ast::SymbolTable & symtab );
 	/// Resolves a statement expression
 	ast::ptr< ast::Expr > resolveStmtExpr( 
