根据GCC C++11 support status website,强类型枚举可用于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并不想让我安装)我可以使用宏轻松地为这个(较旧的)编译器提供一个后备,但是我通常不喜欢它(它在哪里停止?...)。
这是什么问题支持信息是否错误或缺少“强类型枚举支持”中未包含的其他内容?我能想到的最后一个选择:代码中存在问题吗?
最佳答案
这是一个已知的错误。正如@Casey所发现的,最初g++-4.4
不支持对强类型枚举进行任何关系操作。为了平等起见,此问题已在4.4.1
版本中修复,但对所有其他关系(例如<
和>
)的修复仅使它成为4.5.1
及更高版本。
这是gcc bugzilla上的原始错误线程:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064