Вопрос был изменен!c-style cast cast and operator()
Я использую простой способ скрыть свои перечисления из локальных пространств имен - перечисление внутри структуры. Это примерно так:
struct Color
{
enum Type
{
Red, Green, Black
};
Type t_;
Color(Type t) : t_(t) {}
operator Type() const {return t_;}
private:
template<typename T>
operator T() const;
};
Оператор T() является защитой от неявного литья. Тогда я попытался скомпилировать этот код с GCC и Keil:
Color n;
int a[9];
a[ (int)n ] = 1;
НКУ скомпилирован без ошибок (которым является то, что я ожидал), но Keil даваемого мне ошибку:. «неверного типа преобразования оператора() недоступен ».
Так что мой вопрос: какой компилятор прав?
Я знаю о C++ 11 класса перечислимого, но не поддерживается Keil Теперь
Ни g ++, ни clang ++ не компилируют этот код для меня, даже после исправления определения 'Color n;'. – Mat
Какую версию g ++ вы используете? Каковы ошибки? – Amomum
'invalid cast from type 'Color' to type 'int'': GCC 4.6.3, 4.7.2, 4.8.0; 'reinterpret_cast от 'Цвет' до 'int' не допускается': clang 3.3 – Mat