根据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.6g++-4.7g++-4.8clang++ 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

09-10 03:45
查看更多