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

C++ g+中的强类型枚举+-4.4,c++,c++11,g++,strongly-typed-enum,C++,C++11,G++,Strongly Typed Enum,根据,强类型枚举可用于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 ); } enum类Foo { 价值1, 价值2 }; int main() { Foo a=Foo::value_1; foob=F

根据,强类型枚举可用于
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 );
}
enum类Foo
{
价值1,
价值2
};
int main()
{
Foo a=Foo::value_1;
foob=Foo::value_2;
常数布尔检验=(a
错误消息是
error:类型为'Foo'和'Foo'的操作数对二进制运算符无效这是一个已知错误。正如@Casey发现的,最初的
g++-4.4
不支持强类型枚举上的任何关系操作。为了平等起见,这在版本
4.4.1
中是固定的,但对所有其他关系(如
)的固定只使其成为
4.5.1
及更高版本


这是gcc bugzilla上的原始错误线程:

对于生产代码,我的建议是在至少4.7之前的版本上不要使用C++11功能,最好不要在4.8之前使用。如果您坚持支持多个编译器版本,并且希望使用C++11特性,那么您很快就会成为g++bug数据库维护者。Ubuntu13确实提供了g++4.7开箱即用,并且有一个用于g++4.8的ppa。除了这一点点之外,它工作得很好。我知道,我更希望在任何地方都有基于范围的for循环,但这是在良好的特性和兼容性之间的折衷。对于自包含的示例和研究工作+1。遗憾的是,这似乎是SO问题的一个例外。如果您打算在C++11之前的编译器上使用C++11功能,您必须期望这些功能与标准中描述的不同,因为(a)在实验实现和最终标准之间对功能进行了更改,以及(b)在实现中存在明显的老式错误(这就是“实验性”的意思)。@Casey Well根据官方网站,GCC的所有版本都只支持“实验性”C++11。但是,如果网站上有一个声明支持“X及以上”版本的功能,我希望它能与这些版本一起工作。否则那张单子有什么意义?