g ++ - 4.4中的强类型枚举

ste*_*fan 5 c++ g++ c++11 strongly-typed-enum

根据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 );
}
Run Code Online (Sandbox Code Playgroud)

错误消息是error: invalid operands of types ‘Foo’ and ‘Foo’ to binary ‘operator<’.

接受该代码编译器包括g++-4.6,g++-4.7,g++-4.8clang++ 3.2.(我无法测试,g++-4.5因为我目前没有安装它(而Ubuntu 13不希望我)

我可以轻松地为这个(相当旧的)编译器提供一个带有宏的回退,但我通常不喜欢它(它停在哪里?...).

这有什么问题?支持信息是错误还是缺少一些不包含在"支持强类型枚举"中?我能想到的最后一个选项:我的代码中存在问题吗?

ste*_*fan 2

这是一个已知的错误。正如@Casey 发现的那样,最初g++-4.4不支持强类型枚举上的任何关系操作。对于equal,这已在 version 中修复,但对所有其他关系(例如和 )4.4.1的修复仅使其成为和 之上。<>4.5.1

这是 gcc bugzilla 上的原始错误线程:http://gcc.gnu.org/bugzilla/show_bug.cgi ?id=38064