According to the GCC C++11 support status website, strongly typed enums are available for g++4.4 and greater.
However the following does not compile with 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 );
}
The error message is error: invalid operands of types ‘Foo’ and ‘Foo’ to binary ‘operator<’.
Compilers that accept the code include g++-4.6, g++-4.7, g++-4.8 and clang++ 3.2. ( I couldn't test with g++-4.5 as I don't have it installed currently (and Ubuntu 13 doesn't want me to))
I could easily provide a fallback for this (rather old) compiler with a macro, but I generally dislike that (where does it stop?...).
What's the problem here? Is the information of support wrong or is another bit missing that's not included in "support for strongly-typed enums"? Last option I can think of: Is the problem in my code?
It's a known bug. As @Casey found out, originally g++-4.4 did not support any relational operations on strongly-typed enums. For equality, this was fixed in version 4.4.1, but the fix for all other relations such as < and > only made it into 4.5.1 and above.
This is the original bug thread on the gcc bugzilla: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With