Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 4b0f9977dbaf2d66c3868617ef00f4cf9a136fa9)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision ca946a45b3577867588c7cb7d196558c7e1b0074)
@@ -766,13 +766,16 @@
 			} // if
 		} // for
-		// function may return struct or union value, in which case we need to add alternatives for implicit conversions to each of the anonymous members
+
+		candidates.clear();
+		candidates.splice( candidates.end(), alternatives );
+
+		findMinCost( candidates.begin(), candidates.end(), std::back_inserter( alternatives ) );
+
+		// function may return struct or union value, in which case we need to add alternatives for implicit
+		// conversions to each of the anonymous members, must happen after findMinCost since anon conversions
+		// are never the cheapest expression
 		for ( const Alternative & alt : alternatives ) {
 			addAnonConversions( alt );
 		}
-
-		candidates.clear();
-		candidates.splice( candidates.end(), alternatives );
-
-		findMinCost( candidates.begin(), candidates.end(), std::back_inserter( alternatives ) );
 
 		if ( alternatives.empty() && targetType && ! targetType->isVoid() ) {
