2015-01-13 15 views
6

Tôi đã sử dụng std :: rbegin và std :: rend trong MSVC 2013. Khi tôi cố gắng biên dịch mã của tôi bằng GCC 4.9.1 hoặc clang 3.5.0, cả hai đều cho tôi biết rằng 'rbegin' và 'rend' không phải là một phần của không gian tên 'std'.std :: rbegin và std :: hàm rend trong GCC 4.9 và clang 3.5

Xem ví dụ mã bên dưới. Tôi có làm điều gì sai hay đơn giản là họ chưa thực hiện trong GCC và kêu vang?

// test.cpp 

#include <vector> 
#include <iostream> 
#include <iterator> 

int main(int, char**) 
{ 
    std::vector<int> test = {1, 2, 3 ,4, 5}; 
    for (auto it = std::rbegin(test); it != std::rend(test); ++it) { 
     std::cout << *it << ", "; 
    } 
    std::cout << std::endl; 

    return 0; 
} 

đầu ra GCC:

g++ --std=c++14 test.cpp -o test && ./test 
test.cpp: In function ‘int main(int, char**)’: 
test.cpp:10:20: error: ‘rbegin’ is not a member of ‘std’ 
    for (auto it = std::rbegin(test); it != std::rend(test); ++it) { 
        ^
test.cpp:10:45: error: ‘rend’ is not a member of ‘std’ 
    for (auto it = std::rbegin(test); it != std::rend(test); ++it) { 
              ^

đầu ra kêu vang là tương tự, được tạo ra với:

clang++ --std=c++14 test.cpp -o test && ./test 
+0

Bạn đang so sánh GCC với Clang nhưng cả hai đều sử dụng libstdC++ theo mặc định và nó thực sự là triển khai thư viện chuẩn mà bạn nên so sánh. –

Trả lời

5

Nó không làm việc với Clang 3.5 bằng cách sử dụng tùy chọn -std=c++14 -stdlib=libc++. Xem trang này Live Example. Tôi nghĩ rằng sự hỗ trợ thư viện libstdC++ cho rbegin()rend() chưa hoàn thành như phiên bản 4.9.2 (và nó cũng là bản phát hành not yet implemented in the upcoming gcc 5.0).

CẬP NHẬT: giờ đây nó hoạt động trong bản phát hành thân cây gcc 5.0.

+0

Phải, do đó, nó chỉ libstdC++ mà không có nó được nêu ra. –

+2

[Theo tài liệu] (http://en.cppreference.com/w/cpp/iterator/rbegin), đây là một tính năng C++ 14 mới. Tôi vẫn ngạc nhiên vì nó chưa được thực hiện. – sjdowling

+0

@LightnessRacesinOrbit Tôi nghĩ rằng gcc 5 sắp tới sẽ có nó. Đã không tìm thấy một trình biên dịch trực tuyến để chứng minh điều đó. – TemplateRex

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