根據GCC C++11 support status website,強類型枚舉可用於g++4.4
及更高版本。在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不希望我))
我可以很容易地爲這個(較舊的)編譯器提供一個後備,但我通常不喜歡那(它停止在哪裏?)。
這裏有什麼問題?支持信息是錯誤的還是另外一點缺失,它不包括在「支持強類型枚舉」中?最後一個選項,我可以想到:是我的代碼中的問題?
,我的建議將被不事先使用C++ 11個特徵上版本至少4.7和優選不之前4.8。如果你堅持支持多個編譯器版本*和*你想使用C++ 11特性,你很快就會成爲g ++ bug數據庫維護者。 Ubuntu 13的確提供了g ++ 4.7開箱即用的功能,並且g ++ 4.8 – TemplateRex
有一個ppa,除了這個小小的一點外,它工作的很好。我知道,我寧願在各個地方都有基於範圍的循環,但它是在很好的功能和兼容性之間取捨的。 – stefan
+1爲自給自足的例子和研究工作。可悲的是,這似乎是SO問題的例外。 – juanchopanza