2015-01-13 19 views
6

Ben GCC 4.9.1 veya çınlama kullanarak kodumu derlemeye çalıştım ben MSVC 2013 yılında std :: rbegin ve std :: rend kullanıyoruz 3.5.0, her ikisi de 'rbegin' ve 'rend' adlarının 'std' ad alanının bir parçası olmadığını söylüyor.std :: rbegin ve GCC 4.9 de std :: parçalamak fonksiyonu ve çınlama 3.5

Aşağıdaki kod örneğine bakın. Yanlış bir şey mi yapıyorum yoksa henüz GCC ve clang'da uygulanmadılar mı?

// 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; 
} 

GCC çıkışı:

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) { 
              ^

clang çıkışı ile üretilen, benzer: -std=c++14 -stdlib=libc++ seçeneğini kullanarak Clang 3.5 ile

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

GCC'yi Clang ile karşılaştırıyorsunuz ancak her ikisi de libstdC++'yi varsayılan olarak kullanıyor ve gerçekten karşılaştırmanız gereken standart kitaplık uygulamaları. –

cevap

5

It does iş. Bu Live Example'a bakın. Ben rbegin() ve rend() için libstdC++ kitaplığı desteğinin sürüm 4.9.2 olarak tamamlanmadığını düşünüyorum (ve ayrıca not yet implemented in the upcoming gcc 5.0 sürümü de).

UPDATE: Şimdi gcc 5.0 gövde sürümlerinde çalışıyor.

+0

Doğru, bu sadece henüz libstdC++ değil. –

+2

[Dokümantasyona göre] (http://en.cppreference.com/w/cpp/iterator/rbegin) yeni bir C++ 14 özelliğidir. Yine de henüz uygulanmadığına şaşırdım. – sjdowling

+0

@LightnessRacesinOrbit Gelecek olan gcc 5'in sahip olacağını düşünüyorum. Bunu göstermek için çevrimiçi bir derleyici bulunamadı. – TemplateRex