Thanks to recently approved standard (C++11 / C++0x), it is possible to forward declare enums. It was possible with classes for the long time, for example, “class MyClass;” in C++ [forward] declares class without providing underlying details. For enums it was not possible, because compiler needed to know exact size of the enum.
Below are details from Wikipedia:
Forward-declaring enums is also possible in C++11. Previously, enum types could not be forward-declared because the size of the enumeration depends on the definition of its members. As long as the size of the enumeration is specified either implicitly or explicitly, it can be forward-declared:
enum Enum1; // Illegal in C++03 and C++11; the underlying type cannot be determined.
enum Enum2 : unsigned int; // Legal in C++11, the underlying type is explicitly specified.
enum class Enum3; // Legal in C++11, the underlying type is int.
enum class Enum4 : unsigned int; // Legal C++11.
enum Enum2 : unsigned short; // Illegal in C++11, because Enum2 was previously declared with a different underlying type.