Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision f5dbc8df489de22e267b0fb6f49ccf90c87fa35f)
@@ -1482,25 +1482,8 @@
 
 	void Finder::postvisit( const ast::SizeofExpr * sizeofExpr ) {
-		if ( sizeofExpr->type ) {
-			addCandidate(
-				new ast::SizeofExpr{
-					sizeofExpr->location, resolveTypeof( sizeofExpr->type, context ) },
-				tenv );
-		} else {
-			// find all candidates for the argument to sizeof
-			CandidateFinder finder( context, tenv );
-			finder.find( sizeofExpr->expr );
-			// find the lowest-cost candidate, otherwise ambiguous
-			CandidateList winners = findMinCost( finder.candidates );
-			if ( winners.size() != 1 ) {
-				SemanticError(
-					sizeofExpr->expr.get(), "Ambiguous expression in sizeof operand: " );
-			}
-			// return the lowest-cost candidate
-			CandidateRef & choice = winners.front();
-			choice->expr = referenceToRvalueConversion( choice->expr, choice->cost );
-			choice->cost = Cost::zero;
-			addCandidate( *choice, new ast::SizeofExpr{ sizeofExpr->location, choice->expr } );
-		}
+		addCandidate(
+			new ast::SizeofExpr{
+				sizeofExpr->location, resolveTypeof( sizeofExpr->type, context ) },
+			tenv );
 	}
 
@@ -1537,26 +1520,8 @@
 
 	void Finder::postvisit( const ast::AlignofExpr * alignofExpr ) {
-		if ( alignofExpr->type ) {
-			addCandidate(
-				new ast::AlignofExpr{
-					alignofExpr->location, resolveTypeof( alignofExpr->type, context ) },
-				tenv );
-		} else {
-			// find all candidates for the argument to alignof
-			CandidateFinder finder( context, tenv );
-			finder.find( alignofExpr->expr );
-			// find the lowest-cost candidate, otherwise ambiguous
-			CandidateList winners = findMinCost( finder.candidates );
-			if ( winners.size() != 1 ) {
-				SemanticError(
-					alignofExpr->expr.get(), "Ambiguous expression in alignof operand: " );
-			}
-			// return the lowest-cost candidate
-			CandidateRef & choice = winners.front();
-			choice->expr = referenceToRvalueConversion( choice->expr, choice->cost );
-			choice->cost = Cost::zero;
-			addCandidate(
-				*choice, new ast::AlignofExpr{ alignofExpr->location, choice->expr } );
-		}
+		addCandidate(
+			new ast::AlignofExpr{
+				alignofExpr->location, resolveTypeof( alignofExpr->type, context ) },
+			tenv );
 	}
 
Index: src/ResolvExpr/Unify.cpp
===================================================================
--- src/ResolvExpr/Unify.cpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/ResolvExpr/Unify.cpp	(revision f5dbc8df489de22e267b0fb6f49ccf90c87fa35f)
@@ -234,8 +234,4 @@
 			if ( !e2so ) return;
 
-			assert((e1->type != nullptr) ^ (e1->expr != nullptr));
-			assert((e2so->type != nullptr) ^ (e2so->expr != nullptr));
-			if ( !(e1->type && e2so->type) ) return;
-
 			// expression unification calls type unification (mutual recursion)
 			result = unifyExact( e1->type, e2so->type, tenv, need, have, open, widen );
