MSVC supports enum type forward declarations and doesn't complain if the enum is only defined in a later included file, but GCC requires enums to be defined before being used in parameters or fields.
This emits every WinRT enum definition, unlike MIDL, before any typedef, so that the generated headers then work with GCC.