Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision dba6db9a6025d74a9abed179c7aefcec1d0d09ab)
+++ 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() ) {
