Index: src/CodeTools/ResolvProtoDump.cc
===================================================================
--- src/CodeTools/ResolvProtoDump.cc	(revision 04bdc267074e647270359bb1cb01aea37691be2f)
+++ src/CodeTools/ResolvProtoDump.cc	(revision af00c4589447fcba274fd7a68bac3d284e211d76)
@@ -51,10 +51,10 @@
 
 		/// Child constructor
-		ProtoDump(const ProtoDump* p, Type* r) 
+		ProtoDump(const ProtoDump* p, Type* r)
 			: decls(), exprs(), subs(), closed(p->closed), parent(p), rtnType(r) {}
 
 		// Fix copy issues
-		ProtoDump(const ProtoDump& o) 
-			: decls(o.decls), exprs(o.exprs), subs(o.subs), closed(o.closed), parent(o.parent), 
+		ProtoDump(const ProtoDump& o)
+			: decls(o.decls), exprs(o.exprs), subs(o.subs), closed(o.closed), parent(o.parent),
 			  rtnType(maybeClone(o.rtnType.get())) {}
 		ProtoDump( ProtoDump&& ) = default;
@@ -69,8 +69,8 @@
 			parent = o.parent;
 			rtnType.reset( maybeClone(o.rtnType.get()) );
-			
+
 			return *this;
 		}
-		ProtoDump& operator= (ProtoDump&&) = default;
+		ProtoDump& operator= (ProtoDump&&) = delete;
 
 	private:
@@ -96,5 +96,5 @@
 			subs.emplace_back( std::move(sub.pass) );
 		}
-	
+
 		/// Whether lists should be separated, terminated, or preceded by their separator
 		enum septype { separated, terminated, preceded };
@@ -102,5 +102,5 @@
 		/// builds space-separated list of types
 		template<typename V>
-		static void build( V& visitor, const std::list< Type* >& tys, std::stringstream& ss, 
+		static void build( V& visitor, const std::list< Type* >& tys, std::stringstream& ss,
 				septype mode = separated ) {
 			if ( tys.empty() ) return;
@@ -121,5 +121,5 @@
 		/// builds list of types wrapped as tuple type
 		template<typename V>
-		static void buildAsTuple( V& visitor, const std::list< Type* >& tys, 
+		static void buildAsTuple( V& visitor, const std::list< Type* >& tys,
 				std::stringstream& ss ) {
 			switch ( tys.size() ) {
@@ -162,5 +162,5 @@
 			if ( name.compare( 0, 10, "_operator_" ) == 0 ) {
 				ss << name.substr(10);
-			} else if ( name.compare( "_constructor" ) == 0 
+			} else if ( name.compare( "_constructor" ) == 0
 					|| name.compare( "_destructor" ) == 0 ) {
 				ss << name.substr(1);
@@ -173,5 +173,5 @@
 
 		/// replaces operators with resolv-proto names
-		static void rp_name( const std::string& name, std::stringstream& ss, 
+		static void rp_name( const std::string& name, std::stringstream& ss,
 				std::string&& pre = "" ) {
 			// safety check for anonymous names
@@ -187,6 +187,6 @@
 				op_name( info.outputName, ss );
 				return;
-			} 
-			
+			}
+
 			// replace retval names
 			if ( name.compare( 0, 8, "_retval_" ) == 0 ) {
@@ -195,7 +195,7 @@
 				return;
 			}
-			
+
 			// default to just name, with first character in lowercase
-			ss << pre 
+			ss << pre
 			   << (char)std::tolower( static_cast<unsigned char>(name[0]) )
 			   << (name.c_str() + 1);
@@ -221,5 +221,5 @@
 			// strip trailing "_generic_" from autogen names (avoids some user-generation issues)
 			char generic[] = "_generic_"; size_t n_generic = sizeof(generic) - 1;
-			if ( stripped.size() >= n_generic 
+			if ( stripped.size() >= n_generic
 					&& stripped.substr( stripped.size() - n_generic ) == generic ) {
 				stripped.resize( stripped.size() - n_generic );
@@ -237,5 +237,5 @@
 			unsigned depth;                                 ///< Depth of nesting from root type
 
-			TypePrinter( const std::unordered_set<std::string>& closed, std::stringstream& ss ) 
+			TypePrinter( const std::unordered_set<std::string>& closed, std::stringstream& ss )
 				: ss(ss), closed(closed), depth(0) {}
 
@@ -337,5 +337,5 @@
 			}
 		};
-	
+
 		/// builds description of function
 		void build( const std::string& name, FunctionType* fnTy, std::stringstream& ss ) {
@@ -350,5 +350,5 @@
 			for ( TypeDecl* tyvar : fnTy->forall ) {
 				for ( DeclarationWithType* assn : tyvar->assertions ) {
-					ss << " | "; 
+					ss << " | ";
 					build( assn->name, assn->get_type(), ss );
 				}
@@ -360,5 +360,5 @@
 			// ignore top-level references
 			Type *norefs = ty->stripReferences();
-			
+
 			// fall back to function declaration if function type
 			if ( PointerType* pTy = dynamic_cast< PointerType* >(norefs) ) {
@@ -409,5 +409,5 @@
 			std::stringstream& ss;                          ///< Output to print to
 
-			ExprPrinter( const std::unordered_set<std::string>& closed, std::stringstream& ss ) 
+			ExprPrinter( const std::unordered_set<std::string>& closed, std::stringstream& ss )
 				: closed(closed), ss(ss) {}
 
@@ -476,5 +476,5 @@
 				visit_children = false;
 			}
-			
+
 			/// Member access handled as function from aggregate to member
 			void previsit( UntypedMemberExpr* expr ) {
@@ -662,5 +662,5 @@
 					}
 				}
-				
+
 				// add named parameters and returns to local scope
 				body.pass.addAll( decl->type->returnVals );
@@ -679,9 +679,9 @@
 		void previsit( StructDecl* sd ) { addAggregateFields(sd); }
 		void previsit( UnionDecl* ud ) { addAggregateFields(ud); }
-		
+
 		void previsit( EnumDecl* ed ) {
-			std::unique_ptr<Type> eType = 
+			std::unique_ptr<Type> eType =
 				std::make_unique<BasicType>( Type::Qualifiers{}, BasicType::SignedInt );
-			
+
 			// add field names directly to enclosing scope
 			for ( Declaration* member : ed->members ) {
