Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 0872c429921de141046fcfc46ae49aef08854b1b)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 73a5cadbd1f793f9d7fa1cdf290ae5115ec37051)
@@ -607,4 +607,11 @@
 			  expls(move(expls)) {}
 		
+		ArgPack(const ArgPack& o, TypeEnvironment&& env, AssertionSet&& need, AssertionSet&& have, 
+				OpenVarSet&& openVars, unsigned nextArg, Cost added )
+			: parent(o.parent), expr(o.expr ? o.expr->clone() : nullptr), cost(o.cost + added), 
+			  env(move(env)), need(move(need)), have(move(have)), openVars(move(openVars)), 
+			  nextArg(nextArg), tupleStart(o.tupleStart), expls() {}
+			  
+
 		// ArgPack(const ArgPack& o)
 		// 	: parent(o.parent), expr(o.expr ? o.expr->clone() : nullptr), env(o.env), 
@@ -747,8 +754,8 @@
 						if ( exploded.empty() ) {
 							// skip empty tuple arguments by (near-)cloning parent into next gen
-							results.emplace_back( 
-								results[i].parent, results[i].expr.get(), move(env), 
-								copy(results[i].need), copy(results[i].have), move(openVars), 
-								j + 1, results[i].tupleStart, actual.cost + results[i].cost );
+							results.emplace_back(
+								results[i], move(env), copy(results[i].need), 
+								copy(results[i].have), move(openVars), j + 1, actual.cost );
+							
 							continue;
 						}
@@ -848,8 +855,8 @@
 				if ( exploded.empty() ) {
 					// skip empty tuple arguments by (near-)cloning parent into next gen
-					results.emplace_back( 
-						results[i].parent, results[i].expr.get(), move(env), move(need), 
-						move(have), move(openVars), j + 1, results[i].tupleStart, 
-						actual.cost + results[i].cost );
+					results.emplace_back(
+						results[i], move(env), move(need), move(have), move(openVars), j + 1, 
+						actual.cost );
+
 					continue;
 				}
@@ -995,7 +1002,6 @@
 							// skip empty tuple arguments by (near-)cloning parent into next gen
 							results.emplace_back( 
-								results[i].parent, results[i].expr.get(), move(env), 
-								copy(results[i].need), copy(results[i].have), move(openVars), 
-								j + 1, results[i].tupleStart, actual.cost + results[i].cost );
+								results[i], move(env), copy(results[i].need), 
+								copy(results[i].have), move(openVars), j + 1, actual.cost );
 							continue;
 						}
