2013-07-19 38 views
5

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.8clang++ 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?

+0

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

+0

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

+2

+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

Trả lời

2

Đó là lỗi được biết đến. Như @Casey đã phát hiện ra, ban đầu, g++-4.4 không hỗ trợ bất kỳ hoạt động quan hệ nào trên các enums được đánh máy mạnh. Đối với bình đẳng, điều này đã được sửa trong phiên bản 4.4.1, nhưng bản sửa lỗi cho tất cả các mối quan hệ khác chẳng hạn như <> chỉ làm cho nó thành 4.5.1 trở lên.

Đây là thread lỗi gốc trên bugzilla gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064

Các vấn đề liên quan