Index: src/AST/Decl.cpp
===================================================================
--- src/AST/Decl.cpp	(revision 065867274d8bd8d2dc7817a83c4af363d233de03)
+++ src/AST/Decl.cpp	(revision 8f5571611e55362b66ba5af61560f8d5d9ea50cb)
@@ -142,21 +142,22 @@
 bool EnumDecl::valueOf( const Decl * enumerator, long long& value ) const {
 	if ( enumValues.empty() ) {
-		long long crntVal = 0;
+		Evaluation crntVal = {0, true, true};  // until expression is given, we know to start counting from 0
 		for ( const Decl * member : members ) {
 			const ObjectDecl* field = strict_dynamic_cast< const ObjectDecl* >( member );
 			if ( field->init ) {
 				const SingleInit * init = strict_dynamic_cast< const SingleInit* >( field->init.get() );
-				auto result = eval( init->value );
-				if ( ! result.second ) {
+				crntVal = eval( init->value );
+				if ( ! crntVal.isEvaluableInGCC ) {
 					SemanticError( init->location, ::toString( "Non-constexpr in initialization of "
 						"enumerator: ", field ) );
 				}
-				crntVal = result.first;
 			}
 			if ( enumValues.count( field->name ) != 0 ) {
 				SemanticError( location, ::toString( "Enum ", name, " has multiple members with the " 	"name ", field->name ) );
 			}
-			enumValues[ field->name ] = crntVal;
-			++crntVal;
+			if (crntVal.hasKnownValue) {
+				enumValues[ field->name ] = crntVal.knownValue;
+			}
+			++crntVal.knownValue;
 		}
 	}
