http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51242
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-11-19 11:52:38 UTC --- The check is for an unscoped enumeration type which does seem intentional. This change allows the example to compile: --- cp/decl2.c.orig 2012-11-19 11:50:28.842443803 +0000 +++ cp/decl2.c 2012-11-19 11:46:08.445472115 +0000 @@ -1026,7 +1026,7 @@ if (TREE_CODE (value) == VOID_TYPE) return void_type_node; - if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value)) + if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value)) && (POINTER_TYPE_P (value) || !dependent_type_p (TREE_TYPE (value)))) { It emits a warning though: e.cc:5:19: warning: 'MyClass::Field1' is too small to hold all values of 'enum class MyEnum' [enabled by default]