Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision db67b11a26ef91f7c97930c8bb9f50bead0353ad)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision c93bc28fc58cf97703952c9f870947a14d155972)
@@ -241,5 +241,6 @@
 	void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const TypeEnvironment & env, Expression * member ) {
 		// by this point, member must be a name expr
-		NameExpr * nameExpr = safe_dynamic_cast< NameExpr * >( member );
+		NameExpr * nameExpr = dynamic_cast< NameExpr * >( member );
+		if ( ! nameExpr ) return;
 		const std::string & name = nameExpr->get_name();
 		std::list< Declaration* > members;
@@ -263,5 +264,5 @@
 			// during parsing and reusing that information here.
 			std::stringstream ss( constantExpr->get_constant()->get_value() );
-			int val;
+			int val = 0;
 			std::string tmp;
 			if ( ss >> val && ! (ss >> tmp) ) {
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision db67b11a26ef91f7c97930c8bb9f50bead0353ad)
+++ src/ResolvExpr/CommonType.cc	(revision c93bc28fc58cf97703952c9f870947a14d155972)
@@ -61,4 +61,5 @@
 			// std::cerr << "unify success" << std::endl;
 			if ( widenSecond ) {
+				// std::cerr << "widen second" << std::endl;
 				if ( widenFirst || other->get_qualifiers() <= refType->get_qualifiers() ) {
 					result = new ReferenceType( refType->get_qualifiers(), common ); // refType->clone();
@@ -66,4 +67,5 @@
 				}
 			} else if ( widenFirst ) {
+				// std::cerr << "widen first" << std::endl;
 				if ( widenSecond || refType->get_qualifiers() <= other->get_qualifiers() ) {
 					result = common;
@@ -123,15 +125,15 @@
 		} // if
 #ifdef DEBUG
-		std::cout << "============= commonType" << std::endl << "type1 is ";
-		type1->print( std::cout );
-		std::cout << " type2 is ";
-		type2->print( std::cout );
+		std::cerr << "============= commonType" << std::endl << "type1 is ";
+		type1->print( std::cerr );
+		std::cerr << " type2 is ";
+		type2->print( std::cerr );
 		if ( result ) {
-			std::cout << " common type is ";
-			result->print( std::cout );
+			std::cerr << " common type is ";
+			result->print( std::cerr );
 		} else {
-			std::cout << " no common type";
-		} // if
-		std::cout << std::endl;
+			std::cerr << " no common type";
+		} // if
+		std::cerr << std::endl;
 #endif
 		return result;
@@ -201,4 +203,5 @@
 	void CommonType::visit( PointerType *pointerType ) {
 		if ( PointerType *otherPointer = dynamic_cast< PointerType* >( type2 ) ) {
+			// std::cerr << "commonType: two pointers: " << pointerType << " / " << otherPointer << std::endl;
 			if ( widenFirst && dynamic_cast< VoidType* >( otherPointer->get_base() ) && ! isFtype(pointerType->get_base()) ) {
 				getCommonWithVoidPointer( otherPointer, pointerType );
@@ -207,4 +210,5 @@
 			} else if ( ( pointerType->get_base()->get_qualifiers() >= otherPointer->get_base()->get_qualifiers() || widenFirst )
 					   && ( pointerType->get_base()->get_qualifiers() <= otherPointer->get_base()->get_qualifiers() || widenSecond ) ) {
+				// std::cerr << "middle case" << std::endl;
 				Type::Qualifiers tq1 = pointerType->get_base()->get_qualifiers(), tq2 = otherPointer->get_base()->get_qualifiers();
 				pointerType->get_base()->get_qualifiers() = Type::Qualifiers();
@@ -213,4 +217,5 @@
 				OpenVarSet newOpen( openVars );
 				if ( unifyExact( pointerType->get_base(), otherPointer->get_base(), env, have, need, newOpen, indexer ) ) {
+					// std::cerr << "unifyExact success" << std::endl;
 					if ( tq1 < tq2 ) {
 						result = pointerType->clone();
@@ -220,5 +225,5 @@
 					result->get_qualifiers() = tq1 | tq2;
 				} else {
-					/// std::cout << "place for ptr-to-type" << std::endl;
+					/// std::cerr << "place for ptr-to-type" << std::endl;
 				} // if
 				pointerType->get_base()->get_qualifiers() = tq1;
@@ -235,4 +240,6 @@
 	void CommonType::visit( ReferenceType *refType ) {
 		if ( ReferenceType *otherRef = dynamic_cast< ReferenceType* >( type2 ) ) {
+			// std::cerr << "commonType: both references: " << refType << " / " << otherRef << std::endl;
+			// std::cerr << ( refType->get_base()->get_qualifiers() >= otherRef->get_base()->get_qualifiers() || widenFirst ) << (refType->get_base()->get_qualifiers() <= otherRef->get_base()->get_qualifiers() || widenSecond) << std::endl;
 			if ( widenFirst && dynamic_cast< VoidType* >( otherRef->get_base() ) && ! isFtype(refType->get_base()) ) {
 				getCommonWithVoidPointer( otherRef, refType );
@@ -241,4 +248,5 @@
 			} else if ( ( refType->get_base()->get_qualifiers() >= otherRef->get_base()->get_qualifiers() || widenFirst )
 					   && ( refType->get_base()->get_qualifiers() <= otherRef->get_base()->get_qualifiers() || widenSecond ) ) {
+				// std::cerr << "middle case" << std::endl;
 				Type::Qualifiers tq1 = refType->get_base()->get_qualifiers(), tq2 = otherRef->get_base()->get_qualifiers();
 				refType->get_base()->get_qualifiers() = Type::Qualifiers();
@@ -254,5 +262,5 @@
 					result->get_qualifiers() = tq1 | tq2;
 				} else {
-					/// std::cout << "place for ptr-to-type" << std::endl;
+					/// std::cerr << "place for ptr-to-type" << std::endl;
 				} // if
 				refType->get_base()->get_qualifiers() = tq1;
Index: src/ResolvExpr/ResolveTypeof.cc
===================================================================
--- src/ResolvExpr/ResolveTypeof.cc	(revision db67b11a26ef91f7c97930c8bb9f50bead0353ad)
+++ src/ResolvExpr/ResolveTypeof.cc	(revision c93bc28fc58cf97703952c9f870947a14d155972)
@@ -60,5 +60,7 @@
 			assert( newExpr->has_result() && ! newExpr->get_result()->isVoid() );
 			Type *newType = newExpr->get_result();
+			newExpr->set_result( nullptr );
 			delete typeofType;
+			delete newExpr;
 			return newType;
 		} // if
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision db67b11a26ef91f7c97930c8bb9f50bead0353ad)
+++ src/SynTree/TypeSubstitution.h	(revision c93bc28fc58cf97703952c9f870947a14d155972)
@@ -111,5 +111,5 @@
 				} // if
 			} else {
-				throw SemanticError( "Attempt to provide non-type parameter for type parameter", formal );
+				throw SemanticError( toString( "Attempt to provide non-type parameter: ", toString( *actualIt ).c_str(), " for type parameter " ), formal );
 			} // if
 		} else {
Index: src/Tuples/TupleExpansion.cc
===================================================================
--- src/Tuples/TupleExpansion.cc	(revision db67b11a26ef91f7c97930c8bb9f50bead0353ad)
+++ src/Tuples/TupleExpansion.cc	(revision c93bc28fc58cf97703952c9f870947a14d155972)
@@ -34,6 +34,5 @@
 namespace Tuples {
 	namespace {
-		class MemberTupleExpander final : public Mutator {
-		public:
+		struct MemberTupleExpander final : public Mutator {
 			typedef Mutator Parent;
 			using Parent::mutate;
@@ -42,6 +41,5 @@
 		};
 
-		class UniqueExprExpander final : public GenPoly::DeclMutator {
-		public:
+		struct UniqueExprExpander final : public GenPoly::DeclMutator {
 			typedef GenPoly::DeclMutator Parent;
 			using Parent::mutate;
@@ -58,6 +56,5 @@
 		};
 
-		class TupleAssignExpander : public Mutator {
-		public:
+		struct TupleAssignExpander : public Mutator {
 			typedef Mutator Parent;
 			using Parent::mutate;
@@ -76,11 +73,9 @@
 		};
 
-		class TupleIndexExpander {
-		public:
+		struct TupleIndexExpander {
 			Expression * postmutate( TupleIndexExpr * tupleExpr );
 		};
 
-		class TupleExprExpander final : public Mutator {
-		public:
+		struct TupleExprExpander final : public Mutator {
 			typedef Mutator Parent;
 			using Parent::mutate;
