Новый стандарт С++ дает возможность использовать новый тип перечислений, лично для меня это намного удобнее старых обычных enum "перечислений", но есть одна проблема - она очень не удобна лично для меня, вот пример и суть проблемы: enum class Colors: DWORD { RED = 0xFFFF0000, GREEN = 0xFF00FF00 ... } Начинаю использовать: void draw2DBox(DWORD col) { ...//Не важно что здесь } int main() { draw2DBox(Colors::RED )//Компилятор считает Colors::RED как какой-то объект а не член типа DWORD return 0 } Приходится делать приведение типов: int main() { draw2DBox((DWORD)Colors::RED )//Так компилируется - но это жутко не удобно return 0 } Может можно как-то обойтись без приведения типов? UPD: Использую VS 2015
Ответ Не работает, не должно работать и не будет работать. Идеей введения enum class была изолированность его значений и видимость особого типа. Неявное приведение для него недоступно by design: http://ideone.com/QQkRvZ enum class test : int { value = 0 } int main() { test t = 0 return test::value } prog.cpp: In function 'int main()': prog.cpp:11:11: error: cannot convert 'int' to 'test' in initialization test t = 0 ^ prog.cpp:12:15: error: cannot convert 'test' to 'int' in return return test::value ^