Forward enum declarations are generally fine with compilers and we use them a lot in winrt headers. However, it causes warnings on clang in MSVC mode. I guess it's handled differently there because, just like the actual MSVC, enums may have different type (signed or unsigned int) depending on its values. Still, other than emitting the warning, the compiler handles it just fine.