C ++ 11 5.19 / 3 "Constant Expressions"
An integral constant expression is a literal constant expression of an integral or non-enumerated type .
The copied enumerations are not integral constant expressions. And the size of the array (if specified) should be "an integral constant expression, and its value must be greater than zero" (8.3.4 / 1 "Arrays").
I suspect that this explains why cloud enumerations are implicitly converted to int .
To work around this problem, you can statically translate enobe with scope into int , as suggested by user 2523017, or use pre-C ++ 11 enumeration enumeration methods:
namespace E { enum { E1, E2, E3, MaxNum }; }
or
struct E { enum { E1, E2, E3, MaxNum }; };
source share