строго типизированные перечисления в g ++ — 4.4

Согласно GCC C ++ 11 поддержка статуса сайта, строго типизированные перечисления доступны для g++4.4 и больше.

Однако следующее не компилируется с g++4.4:

enum class Foo
{
value_1,
value_2
};

int main()
{
Foo a = Foo::value_1;
Foo b = Foo::value_2;
const bool test = ( a < b );
}

Сообщение об ошибке error: invalid operands of types ‘Foo’ and ‘Foo’ to binary ‘operator<’,

Компиляторы, которые принимают код, включают g++-4.6, g++-4.7, g++-4.8 а также clang++ 3.2, (Я не мог проверить с g++-4.5 поскольку я не установил это в настоящее время (и Ubuntu 13 не хочет, чтобы я))

Я мог бы легко предоставить запасной вариант для этого (довольно старого) компилятора с помощью макроса, но мне это вообще не нравится (где он останавливается? …).

В чем здесь проблема? Является ли информация поддержки неверной или отсутствует другая часть, которая не включена в «поддержку строго типизированных перечислений»? Последний вариант, о котором я могу подумать: проблема в моем коде?

5

Решение

Это известен ошибка. Как выяснил @Casey, изначально g++-4.4 не поддерживал никакие реляционные операции над строго типизированными перечислениями. За равенство, это было исправлено в версии 4.4.1, но исправить для всех других отношений, таких как < а также > только сделал это в 4.5.1 и выше.

Это оригинальная ветка об ошибке в gcc bugzilla: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]