2014-05-04 14 views
7

Hãy xem ví dụ sau C++ 11 đoạn:kêu vang ++ chỉ biên dịch chương trình C++ 11 sử dụng tăng :: định dạng khi -std = C++ 11 tùy chọn được giảm

#include <boost/format.hpp> 

int main(int argc, char** argv) 
{ 
    auto s = boost::format(""); 
    return 0; 
} 

Khi tôi biên dịch nó có kêu vang bằng cách sử dụng -std=c++11 tôi nhận được lỗi sau:

$ clang++ -std=c++11 -o main main.cpp 
In file included from main.cpp:1: 
In file included from /usr/include/boost/format.hpp:19: 
In file included from /usr/include/boost/detail/workaround.hpp:41: 
In file included from /usr/include/boost/config.hpp:40: 
In file included from /usr/include/boost/config/select_stdlib_config.hpp:18: 
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/cstddef:51:11: error: 
     no member named 'max_align_t' in the global namespace 
    using ::max_align_t; 
     ~~^ 
1 error generated. 

Nếu không có sự -std=c++11 tất cả mọi thứ biên dịch tốt, nhưng kêu vang in một cảnh báo:

$ clang++ -o main main.cpp 
main.cpp:5:3: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions] 
    auto s = boost::format(""); 
^

Vì vậy, có vẻ như một giải pháp hợp lệ là thả cờ C++ 11, vì phiên bản hiện tại của tiếng kêu dường như ở chế độ C++ 11, dù sao? Hạn chế là bạn sẽ nhận được nhiều cảnh báo.

Có cách giải quyết tốt hơn bên cạnh chuyển hoàn toàn sang gcc không? Vá mã nguồn của boost :: format hoặc gcc-libs là tốt cho tôi. thông tin


hệ thống:

  • Hệ điều hành: Arch Linux x86_64
  • phiên bản Boost: 1.55.0-6
  • gcc-libs: 4.9.0-1
  • kêu vang ++: 3.4 (thẻ/RELEASE_34/final)
+5

Âm thanh như [một lỗi từ kêu vang với libstdC++ 4.9] (https://bbs.archlinux.org/viewtopic.php?pid=1412317). – Chnossos

+0

Nhắc nhở: bạn không thể chỉ thả 'std = C++ 11' trên một TU đơn để giải quyết bất kỳ vấn đề nào vì điều đó sẽ có khả năng phá vỡ ODR cho tất cả các thực thể được khai báo trong (tiêu đề được bao gồm trong) TU đó. Đường dẫn đó nằm [UB] (http://en.wikipedia.org/wiki/Undefined_behavior). Vì vậy, droppping C++ 11 sẽ có nghĩa là thả nó cho tất cả các dự án của bạn (trừ khi TU của bạn không có gì) – sehe

+4

Hoạt động tốt với libC++ thay vì libstdC++, và với libstdC++ đi kèm với gcc 4.8. Tôi nghi ngờ đó là thay đổi này: http://gcc.gnu.org/gcc-4.9/porting_to.html (tìm kiếm max_align_t) –

Trả lời

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