Theo GCC C++11 support status website, enums mạnh mẽ gõ có sẵn cho g++4.4
và lớn hơn.enums mạnh mẽ gõ trong g + + - 4.4
Tuy nhiên sau đây không biên dịch với 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);
}
Các thông báo lỗi là error: invalid operands of types ‘Foo’ and ‘Foo’ to binary ‘operator<’
.
Trình biên dịch chấp nhận mã bao gồm g++-4.6
, g++-4.7
, g++-4.8
và clang++ 3.2
. (Tôi không thể kiểm tra với g++-4.5
vì hiện tại tôi chưa cài đặt nó (và Ubuntu 13 không muốn tôi cài đặt) (01) nhưng tôi thường không thích điều đó (nó dừng ở đâu? ...).
Sự cố ở đây là gì? Là thông tin hỗ trợ sai hoặc là một chút thiếu mà không được bao gồm trong "hỗ trợ cho enums mạnh mẽ gõ"? Tùy chọn cuối cùng tôi có thể nghĩ: Có phải vấn đề trong mã của tôi không?
cho mã sản xuất, khuyến nghị của tôi sẽ được không sử dụng C++ 11 tính năng trên các phiên bản trước ít nhất 4.7 và tốt nhất là không trước 4.8. Nếu bạn nhấn mạnh vào việc hỗ trợ nhiều phiên bản trình biên dịch * và * bạn muốn sử dụng các tính năng C++ 11, bạn nhanh chóng trở thành trình duy trì cơ sở dữ liệu lỗi g ++. Ubuntu 13 không cung cấp g ++ 4.7 ra khỏi hộp, và có một ppa cho g ++ 4.8 – TemplateRex
Vâng nó làm việc tốt ngoại trừ bit nhỏ này. Tôi biết, tôi muốn có phạm vi dựa trên các vòng ở khắp mọi nơi, nhưng đó là một sự cân bằng giữa các tính năng đẹp và khả năng tương thích. – stefan
+1 cho ví dụ tự có và nỗ lực nghiên cứu. Đáng buồn thay, điều này dường như là ngoại lệ đối với các câu hỏi của SO. – juanchopanza