Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -15,5 +15,5 @@
 
 #include <algorithm>               // for copy
-#include <cassert>                 // for safe_dynamic_cast, assert, assertf
+#include <cassert>                 // for strict_dynamic_cast, assert, assertf
 #include <iostream>                // for operator<<, cerr, ostream, endl
 #include <iterator>                // for back_insert_iterator, back_inserter
@@ -336,7 +336,7 @@
 
 	Cost computeApplicationConversionCost( Alternative &alt, const SymTab::Indexer &indexer ) {
-		ApplicationExpr *appExpr = safe_dynamic_cast< ApplicationExpr* >( alt.expr );
-		PointerType *pointer = safe_dynamic_cast< PointerType* >( appExpr->get_function()->get_result() );
-		FunctionType *function = safe_dynamic_cast< FunctionType* >( pointer->get_base() );
+		ApplicationExpr *appExpr = strict_dynamic_cast< ApplicationExpr* >( alt.expr );
+		PointerType *pointer = strict_dynamic_cast< PointerType* >( appExpr->get_function()->get_result() );
+		FunctionType *function = strict_dynamic_cast< FunctionType* >( pointer->get_base() );
 
 		Cost convCost = Cost::zero;
@@ -494,5 +494,5 @@
 			Cost cost = Cost::zero;
 			std::list< Expression * > newExprs;
-			ObjectDecl * obj = safe_dynamic_cast< ObjectDecl * >( formal );
+			ObjectDecl * obj = strict_dynamic_cast< ObjectDecl * >( formal );
 			if ( ! instantiateArgument( obj->get_type(), obj->get_init(), actualExpr, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( newExprs ) ) ) {
 				deleteAll( newExprs );
@@ -787,7 +787,7 @@
 
 			PRINT(
-				ApplicationExpr *appExpr = safe_dynamic_cast< ApplicationExpr* >( withFunc->expr );
-				PointerType *pointer = safe_dynamic_cast< PointerType* >( appExpr->get_function()->get_result() );
-				FunctionType *function = safe_dynamic_cast< FunctionType* >( pointer->get_base() );
+				ApplicationExpr *appExpr = strict_dynamic_cast< ApplicationExpr* >( withFunc->expr );
+				PointerType *pointer = strict_dynamic_cast< PointerType* >( appExpr->get_function()->get_result() );
+				FunctionType *function = strict_dynamic_cast< FunctionType* >( pointer->get_base() );
 				std::cerr << "Case +++++++++++++ " << appExpr->get_function() << std::endl;
 				std::cerr << "formals are:" << std::endl;
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/ResolvExpr/CommonType.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -14,5 +14,5 @@
 //
 
-#include <cassert>                       // for safe_dynamic_cast
+#include <cassert>                       // for strict_dynamic_cast
 #include <map>                           // for _Rb_tree_const_iterator
 #include <utility>                       // for pair
@@ -100,7 +100,7 @@
 			// special case where one type has a reference depth of 1 larger than the other
 			if ( diff > 0 ) {
-				return handleReference( safe_dynamic_cast<ReferenceType *>( type1 ), type2, widenFirst, widenSecond, indexer, env, openVars );
+				return handleReference( strict_dynamic_cast<ReferenceType *>( type1 ), type2, widenFirst, widenSecond, indexer, env, openVars );
 			} else if ( diff < 0 ) {
-				return handleReference( safe_dynamic_cast<ReferenceType *>( type2 ), type1, widenSecond, widenFirst, indexer, env, openVars );
+				return handleReference( strict_dynamic_cast<ReferenceType *>( type2 ), type1, widenSecond, widenFirst, indexer, env, openVars );
 			}
 			// otherwise, both are reference types of the same depth and this is handled by the CommonType visitor.
@@ -114,5 +114,5 @@
 				if ( TypeInstType *inst = dynamic_cast< TypeInstType* >( type2 ) ) {
 					if ( NamedTypeDecl *nt = indexer.lookupType( inst->get_name() ) ) {
-						TypeDecl *type = safe_dynamic_cast< TypeDecl* >( nt );
+						TypeDecl *type = strict_dynamic_cast< TypeDecl* >( nt );
 						if ( type->get_base() ) {
 							Type::Qualifiers tq1 = type1->get_qualifiers(), tq2 = type2->get_qualifiers();
@@ -301,5 +301,5 @@
 			NamedTypeDecl *nt = indexer.lookupType( inst->get_name() );
 			if ( nt ) {
-				TypeDecl *type = safe_dynamic_cast< TypeDecl* >( nt );
+				TypeDecl *type = strict_dynamic_cast< TypeDecl* >( nt );
 				if ( type->get_base() ) {
 					Type::Qualifiers tq1 = inst->get_qualifiers(), tq2 = type2->get_qualifiers();
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/ResolvExpr/ConversionCost.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -95,10 +95,10 @@
 		if ( diff > 0 ) {
 			// TODO: document this
-			Cost cost = convertToReferenceCost( safe_dynamic_cast< ReferenceType * >( src )->get_base(), dest, diff-1, indexer, env, func );
+			Cost cost = convertToReferenceCost( strict_dynamic_cast< ReferenceType * >( src )->get_base(), dest, diff-1, indexer, env, func );
 			cost.incReference();
 			return cost;
 		} else if ( diff < -1 ) {
 			// TODO: document this
-			Cost cost = convertToReferenceCost( src, safe_dynamic_cast< ReferenceType * >( dest )->get_base(), diff+1, indexer, env, func );
+			Cost cost = convertToReferenceCost( src, strict_dynamic_cast< ReferenceType * >( dest )->get_base(), diff+1, indexer, env, func );
 			cost.incReference();
 			return cost;
Index: src/ResolvExpr/CurrentObject.cc
===================================================================
--- src/ResolvExpr/CurrentObject.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/ResolvExpr/CurrentObject.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -286,5 +286,5 @@
 				for ( InitAlternative & alt : ret ) {
 					PRINT( std::cerr << "iterating and adding designators" << std::endl; )
-					alt.designation->get_designators().push_front( new VariableExpr( safe_dynamic_cast< ObjectDecl * >( *curMember ) ) );
+					alt.designation->get_designators().push_front( new VariableExpr( strict_dynamic_cast< ObjectDecl * >( *curMember ) ) );
 					// need to substitute for generic types, so that casts are to concrete types
 					PRINT( std::cerr << "  type is: " << alt.type; )
@@ -346,5 +346,5 @@
 				for ( InitAlternative & alt : ret ) {
 					PRINT( std::cerr << "iterating and adding designators" << std::endl; )
-					alt.designation->get_designators().push_front( new VariableExpr( safe_dynamic_cast< ObjectDecl * >( *curMember ) ) );
+					alt.designation->get_designators().push_front( new VariableExpr( strict_dynamic_cast< ObjectDecl * >( *curMember ) ) );
 				}
 			}
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 58094611c386c7e6f0ba52d00ecf89b154288c42)
+++ src/ResolvExpr/Resolver.cc	(revision e3e16bcf91a7300a6d1f71eaad04e2f3f498cfc2)
@@ -15,5 +15,5 @@
 
 #include <stddef.h>                      // for NULL
-#include <cassert>                       // for safe_dynamic_cast, assert
+#include <cassert>                       // for strict_dynamic_cast, assert
 #include <memory>                        // for allocator, allocator_traits<...
 #include <tuple>                         // for get
@@ -342,5 +342,5 @@
 			CastExpr * castExpr = new CastExpr( caseStmt->get_condition(), initAlts.front().type->clone() );
 			Expression * newExpr = findSingleExpression( castExpr, *this );
-			castExpr = safe_dynamic_cast< CastExpr * >( newExpr );
+			castExpr = strict_dynamic_cast< CastExpr * >( newExpr );
 			caseStmt->set_condition( castExpr->get_arg() );
 			castExpr->set_arg( nullptr );
@@ -398,5 +398,5 @@
 		Parent::enterScope();
 		Visitor::visit( catchStmt );
-		
+
 		if ( catchStmt->get_cond() ) {
 			Expression * wrapped = new CastExpr(
@@ -423,5 +423,5 @@
 		UntypedInitExpr * untyped = new UntypedInitExpr( singleInit->get_value(), currentObject.getOptions() );
 		Expression * newExpr = findSingleExpression( untyped, *this );
-		InitExpr * initExpr = safe_dynamic_cast< InitExpr * >( newExpr );
+		InitExpr * initExpr = strict_dynamic_cast< InitExpr * >( newExpr );
 
 		// move cursor to the object that is actually initialized
@@ -445,5 +445,5 @@
 					if ( isCharType( pt->get_base() ) ) {
 						// strip cast if we're initializing a char[] with a char *, e.g.  char x[] = "hello";
-						CastExpr *ce = safe_dynamic_cast< CastExpr * >( newExpr );
+						CastExpr *ce = strict_dynamic_cast< CastExpr * >( newExpr );
 						newExpr = ce->get_arg();
 						ce->set_arg( nullptr );
