2012-04-19 43 views
7

Làm cách nào để kiểm tra sự hiện diện của các tính năng ngôn ngữ C++ 0x/C++ 11 riêng lẻ? Tôi biết Clang có một hệ thống tốt đẹp cho việc này. Điều gì về GCC, Visual Studio hoặc Boost? Tôi đoán một cách để làm điều đó là để phát hiện phiên bản trình biên dịch và liên quan đến các tính năng được giới thiệu trong phiên bản đó. Nhưng đó là cồng kềnh. Có ai đó đã làm điều đó?C++ 11 tính năng kiểm tra

+1

Trả lời thẳng về phía trước sẽ là viết mã bằng tính năng đó và biên dịch nó. – iammilind

+0

Tại sao câu hỏi này nên được đóng lại? –

+0

@ Nordlöw: Hai người đã bỏ phiếu để đóng nó là bản sao của [câu hỏi này] (http://stackoverflow.com/q/6095885/636019). – ildjarn

Trả lời

3

boost config đi kèm với tập lệnh để kiểm tra một số nhưng không phải tất cả các tính năng của C++ 11.

Tạo tệp cấu hình với các macro cho từng đối tượng địa lý.

+0

Tôi nghĩ bạn có ý định viết gì đó sau * Xem: *. Dù sao, có Boost.Config có lẽ là đặt cược tốt nhất. Các nhân viên Boost đã theo dõi thông tin đó để họ không phải: họ lỗi đội của trình biên dịch để biết chính xác khi nào nó đủ ổn định để được quảng cáo, hoặc trong trường hợp Clang yêu cầu cờ kiểm tra mới. –

+0

Thực ra đó là phần còn lại từ bản nháp-câu trả lời. Tôi sẽ xóa nó. Cảm ơn. – mirk

3

Công cụ xây dựng của bạn có thể trợ giúp việc này.

CMake có lệnh try_compile cho phép bạn kiểm tra xem mẫu mã sẽ biên dịch và đặt biến dựa trên kết quả biên dịch.

Hiện tại tôi chỉ đang sử dụng các tính năng được hỗ trợ phổ biến hơn như nhập số auto.

Bạn thường có thể sử dụng Boost để thay thế các tính năng thư viện bị thiếu và đây có thể là tùy chọn tốt nhất trong vài năm trong khi các trình biên dịch và thư viện được cập nhật và sửa lỗi.

C++ 11 tính năng danh sách tương thích cho GCC là ở đây: http://gcc.gnu.org/projects/cxx0x.html

Lưu ý các cảnh báo:

Quan trọng: hỗ trợ GCC cho C++ 11 vẫn còn thực nghiệm. Một số tính năng đã được triển khai dựa trên các đề xuất ban đầu và sẽ không có nỗ lực nào để duy trì khả năng tương thích ngược khi chúng được cập nhật để phù hợp với tiêu chuẩn C++ 11 cuối cùng.

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