Index: src/Tuples/Explode.h
===================================================================
--- src/Tuples/Explode.h	(revision f585450779a84d6d199d5a7bbfb9345419d41b22)
+++ src/Tuples/Explode.h	(revision 6bbce58bd62e0b1ff16a394dfb2a320dcf9ca898)
@@ -30,4 +30,13 @@
 	Expression * distributeReference( Expression * );
 
+	static inline CastExpr * isReferenceCast( Expression * expr ) {
+		if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
+			if ( dynamic_cast< ReferenceType * >( castExpr->result ) ) {
+				return castExpr;
+			}
+		}
+		return nullptr;
+	}
+
 	/// helper function used by explode
 	template< typename OutputIterator >
@@ -35,5 +44,5 @@
 		if ( isTupleAssign ) {
 			// tuple assignment needs CastExprs to be recursively exploded to easily get at all of the components
-			if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) {
+			if ( CastExpr * castExpr = isReferenceCast( expr ) ) {
 				ResolvExpr::AltList alts;
 				explodeUnique( castExpr->get_arg(), alt, indexer, back_inserter( alts ), isTupleAssign );
