Index: src/AST/Expr.cpp
===================================================================
--- src/AST/Expr.cpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/AST/Expr.cpp	(revision b6f2e7abcc170946c8758bcf25e0848b57d5f213)
@@ -276,9 +276,6 @@
 // --- SizeofExpr
 
-SizeofExpr::SizeofExpr( const CodeLocation & loc, const Expr * e )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), expr( e ), type( nullptr ) {}
-
 SizeofExpr::SizeofExpr( const CodeLocation & loc, const Type * t )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), expr( nullptr ), type( t ) {}
+: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), type( t ) {}
 
 // --- CountExpr
@@ -292,9 +289,6 @@
 // --- AlignofExpr
 
-AlignofExpr::AlignofExpr( const CodeLocation & loc, const Expr * e )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), expr( e ), type( nullptr ) {}
-
 AlignofExpr::AlignofExpr( const CodeLocation & loc, const Type * t )
-: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), expr( nullptr ), type( t ) {}
+: Expr( loc, new BasicType{ BasicKind::LongUnsignedInt } ), type( t ) {}
 
 // --- OffsetofExpr
Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/AST/Expr.hpp	(revision b6f2e7abcc170946c8758bcf25e0848b57d5f213)
@@ -480,22 +480,19 @@
 class SizeofExpr final : public Expr {
 public:
+	ptr<Type> type;
+
+	SizeofExpr( const CodeLocation & loc, const Type * t );
+
+	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
+private:
+	SizeofExpr * clone() const override { return new SizeofExpr{ *this }; }
+	MUTATE_FRIEND
+};
+
+class CountExpr final : public Expr {
+public:
 	ptr<Expr> expr;
 	ptr<Type> type;
 
-	SizeofExpr( const CodeLocation & loc, const Expr * e );
-	SizeofExpr( const CodeLocation & loc, const Type * t );
-	// deliberately no disambiguating overload for nullptr_t
-
-	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
-private:
-	SizeofExpr * clone() const override { return new SizeofExpr{ *this }; }
-	MUTATE_FRIEND
-};
-
-class CountExpr final : public Expr {
-public:
-	ptr<Expr> expr;
-	ptr<Type> type;
-
 	CountExpr( const CodeLocation & loc, const Expr * t );
 	CountExpr( const CodeLocation & loc, const Type * t );
@@ -510,10 +507,7 @@
 class AlignofExpr final : public Expr {
 public:
-	ptr<Expr> expr;
 	ptr<Type> type;
 
-	AlignofExpr( const CodeLocation & loc, const Expr * e );
 	AlignofExpr( const CodeLocation & loc, const Type * t );
-	// deliberately no disambiguating overload for nullptr_t
 
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/AST/Pass.impl.hpp
===================================================================
--- src/AST/Pass.impl.hpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/AST/Pass.impl.hpp	(revision b6f2e7abcc170946c8758bcf25e0848b57d5f213)
@@ -1319,9 +1319,5 @@
 			maybe_accept( node, &SizeofExpr::result );
 		}
-		if ( node->type ) {
-			maybe_accept( node, &SizeofExpr::type );
-		} else {
-			maybe_accept( node, &SizeofExpr::expr );
-		}
+		maybe_accept( node, &SizeofExpr::type );
 	}
 
@@ -1359,9 +1355,5 @@
 			maybe_accept( node, &AlignofExpr::result );
 		}
-		if ( node->type ) {
-			maybe_accept( node, &AlignofExpr::type );
-		} else {
-			maybe_accept( node, &AlignofExpr::expr );
-		}
+		maybe_accept( node, &AlignofExpr::type );
 	}
 
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/AST/Print.cpp	(revision b6f2e7abcc170946c8758bcf25e0848b57d5f213)
@@ -1152,19 +1152,18 @@
 		os << "Sizeof Expression on: ";
 		++indent;
+		node->type->accept( *this );
+		--indent;
+		postprint( node );
+
+		return node;
+	}
+
+	virtual const ast::Expr * visit( const ast::CountExpr * node ) override final {
+		os << "Count Expression on: ";
+		++indent;
 		if ( node->type ) node->type->accept( *this );
 		else safe_print( node->expr );
 		--indent;
 		postprint( node );
-
-		return node;
-	}
-
-	virtual const ast::Expr * visit( const ast::CountExpr * node ) override final {
-		os << "Count Expression on: ";
-		++indent;
-		if ( node->type ) node->type->accept( *this );
-		else safe_print( node->expr );
-		--indent;
-		postprint( node );
 		return node;
 	}
@@ -1173,6 +1172,5 @@
 		os << "Alignof Expression on: ";
 		++indent;
-		if ( node->type ) node->type->accept( *this );
-		else safe_print( node->expr );
+		node->type->accept( *this );
 		--indent;
 		postprint( node );
Index: src/AST/Util.cpp
===================================================================
--- src/AST/Util.cpp	(revision a7efc9681df5c4fcce1ba0578548d32db5ba9d4c)
+++ src/AST/Util.cpp	(revision b6f2e7abcc170946c8758bcf25e0848b57d5f213)
@@ -104,13 +104,4 @@
 	}
 	assertf( false, "Member not found." );
-}
-
-template<typename node_t>
-void oneOfExprOrType( const node_t * node ) {
-	if ( node->expr ) {
-		assertf( node->expr && !node->type, "Exactly one of expr or type should be set." );
-	} else {
-		assertf( !node->expr && node->type, "Exactly one of expr or type should be set." );
-	}
 }
 
@@ -163,10 +154,8 @@
 	void previsit( const SizeofExpr * node ) {
 		previsit( (const ParseNode *)node );
-		oneOfExprOrType( node );
 	}
 
 	void previsit( const AlignofExpr * node ) {
 		previsit( (const ParseNode *)node );
-		oneOfExprOrType( node );
 	}
 
