2013-07-19 61 views
5

根據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.6g++-4.7g++-4.8clang++ 3.2。 (我無法用g++-4.5進行測試,因爲我目前沒有安裝它(而且Ubuntu 13不希望我))

我可以很容易地爲這個(較舊的)編譯器提供一個後備,但我通常不喜歡那(它停止在哪裏?)。

這裏有什麼問題?支持信息是錯誤的還是另外一點缺失,它不包括在「支持強類型枚舉」中?最後一個選項,我可以想到:是我的代碼中的問題?

+0

,我的建議將被不事先使用C++ 11個特徵上版本至少4.7和優選不之前4.8。如果你堅持支持多個編譯器版本*和*你想使用C++ 11特性,你很快就會成爲g ++ bug數據庫維護者。 Ubuntu 13的確提供了g ++ 4.7開箱即用的功能,並且g ++ 4.8 – TemplateRex

+0

有一個ppa,除了這個小小的一點外,它工作的很好。我知道,我寧願在各個地方都有基於範圍的循環,但它是在很好的功能和兼容性之間取捨的。 – stefan

+2

+1爲自給自足的例子和研究工作。可悲的是,這似乎是SO問題的例外。 – juanchopanza

回答

2

這是一個已知的錯誤。正如@Casey發現的,原來g++-4.4不支持強類型枚舉的任何關係操作。對於等於,這在版本4.4.1中得到了修復,但對所有其他關係(如<>)的修復僅將其修改爲4.5.1及以上。

這是關於在gcc bugzilla的原始錯誤線程:用於生產代碼http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064