Index: src/ResolvExpr/Alternative.cc
===================================================================
--- src/ResolvExpr/Alternative.cc	(revision b368dd84ea84d33a0de73c6f989ade0c55c94e44)
+++ src/ResolvExpr/Alternative.cc	(revision 518e97db9916131ba48f4bd8aef137ee63bbbfa0)
@@ -27,5 +27,5 @@
 
 namespace ResolvExpr {
-	Alternative::Alternative() : cost( Cost::zero ), cvtCost( Cost::zero ), expr( 0 ) {}
+	Alternative::Alternative() : cost( Cost::zero ), cvtCost( Cost::zero ), expr( nullptr ) {}
 
 	Alternative::Alternative( Expression *expr, const TypeEnvironment &env, const Cost& cost )
@@ -48,5 +48,5 @@
 	}
 
-	Alternative::Alternative( Alternative && other ) : cost( other.cost ), cvtCost( other.cvtCost ), expr( other.expr ), env( other.env ) {
+	Alternative::Alternative( Alternative && other ) : cost( other.cost ), cvtCost( other.cvtCost ), expr( other.expr ), env( std::move( other.env ) ) {
 		other.expr = nullptr;
 	}
@@ -58,5 +58,5 @@
 		cvtCost = other.cvtCost;
 		expr = other.expr;
-		env = other.env;
+		env = std::move( other.env );
 		other.expr = nullptr;
 		return *this;
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision b368dd84ea84d33a0de73c6f989ade0c55c94e44)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 518e97db9916131ba48f4bd8aef137ee63bbbfa0)
@@ -324,9 +324,12 @@
 		aggInst->lookup( name, members );
 
-		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
-			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( *i ) ) {
-				alternatives.push_back( Alternative( new MemberExpr( dwt, expr->clone() ), env, newCost ) );
-				renameTypes( alternatives.back().expr );
-				addAnonConversions( alternatives.back() ); // add anonymous member interpretations whenever an aggregate value type is seen as a member expression.
+		for ( Declaration * decl : members ) {
+			if ( DeclarationWithType *dwt = dynamic_cast< DeclarationWithType* >( decl ) ) {
+				// addAnonAlternatives uses vector::push_back, which invalidates references to existing elements, so
+				// can't construct in place and use vector::back
+				Alternative newAlt( new MemberExpr( dwt, expr->clone() ), env, newCost );
+				renameTypes( newAlt.expr );
+				addAnonConversions( newAlt ); // add anonymous member interpretations whenever an aggregate value type is seen as a member expression.
+				alternatives.push_back( std::move(newAlt) );
 			} else {
 				assert( false );
@@ -1379,5 +1382,8 @@
 			Cost cost = Cost::zero;
 			Expression * newExpr = data.combine( cost );
-			alternatives.push_back( Alternative( newExpr, env, Cost::zero, cost ) );
+
+			// addAnonAlternatives uses vector::push_back, which invalidates references to existing elements, so
+			// can't construct in place and use vector::back
+			Alternative newAlt( newExpr, env, Cost::zero, cost );
 			PRINT(
 				std::cerr << "decl is ";
@@ -1388,6 +1394,7 @@
 				std::cerr << std::endl;
 			)
-			renameTypes( alternatives.back().expr );
-			addAnonConversions( alternatives.back() ); // add anonymous member interpretations whenever an aggregate value type is seen as a name expression.
+			renameTypes( newAlt.expr );
+			addAnonConversions( newAlt ); // add anonymous member interpretations whenever an aggregate value type is seen as a name expression.
+			alternatives.push_back( std::move(newAlt) );
 		} // for
 	}
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision b368dd84ea84d33a0de73c6f989ade0c55c94e44)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 518e97db9916131ba48f4bd8aef137ee63bbbfa0)
@@ -50,5 +50,5 @@
 	}
 
-	EqvClass::EqvClass() : type( 0 ), allowWidening( true ) {
+	EqvClass::EqvClass() : type( nullptr ), allowWidening( true ) {
 	}
 
@@ -159,6 +159,6 @@
 
 	void TypeEnvironment::print( std::ostream &os, Indenter indent ) const {
-		for ( std::list< EqvClass >::const_iterator i = env.begin(); i != env.end(); ++i ) {
-			i->print( os, indent );
+		for ( const EqvClass & theClass : env ) {
+			theClass.print( os, indent );
 		} // for
 	}
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision b368dd84ea84d33a0de73c6f989ade0c55c94e44)
+++ src/SynTree/ReferenceToType.cc	(revision 518e97db9916131ba48f4bd8aef137ee63bbbfa0)
@@ -50,8 +50,8 @@
 
 namespace {
-	void doLookup( const std::list< Declaration* > &members, const std::string &name, std::list< Declaration* > &foundDecls ) {
-		for ( std::list< Declaration* >::const_iterator i = members.begin(); i != members.end(); ++i ) {
-			if ( (*i)->get_name() == name ) {
-				foundDecls.push_back( *i );
+	void doLookup( const std::list< Declaration * > & members, const std::string & name, std::list< Declaration* > & foundDecls ) {
+		for ( Declaration * decl : members ) {
+			if ( decl->name == name ) {
+				foundDecls.push_back( decl );
 			} // if
 		} // for
@@ -60,5 +60,5 @@
 
 StructInstType::StructInstType( const Type::Qualifiers & tq, StructDecl * baseStruct, const std::list< Attribute * > & attributes ) :
-		Parent( tq, baseStruct->get_name(), attributes ), baseStruct( baseStruct ) {}
+		Parent( tq, baseStruct->name, attributes ), baseStruct( baseStruct ) {}
 
 std::string StructInstType::typeString() const { return "struct"; }
@@ -84,5 +84,5 @@
 void StructInstType::lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const {
 	assert( baseStruct );
-	doLookup( baseStruct->get_members(), name, foundDecls );
+	doLookup( baseStruct->members, name, foundDecls );
 }
 
@@ -103,5 +103,5 @@
 
 UnionInstType::UnionInstType( const Type::Qualifiers & tq, UnionDecl * baseUnion, const std::list< Attribute * > & attributes ) :
-		Parent( tq, baseUnion->get_name(), attributes ), baseUnion( baseUnion ) {}
+		Parent( tq, baseUnion->name, attributes ), baseUnion( baseUnion ) {}
 
 std::string UnionInstType::typeString() const { return "union"; }
@@ -127,5 +127,5 @@
 void UnionInstType::lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const {
 	assert( baseUnion );
-	doLookup( baseUnion->get_members(), name, foundDecls );
+	doLookup( baseUnion->members, name, foundDecls );
 }
 
