Новый стандарт С++ включает удобную фичу Strongly Typed Enums, также называемую Scoped Enums:
enum class En {
A = 2
};
En var = En::A; // вместо En var = A;
Для поддержки этого в текущем компиляторе VC++ можно использовать такие макросы:
#define DEF_ENUM(name) struct enum_##name { enum E
#define END_ENUM(name) ; }; typedef enum_##name::E name;
DEF_ENUM(En) {
A = 2
} END_ENUM(En)
En var = En::A; // вместо En var = A;