I have been using std::rbegin and std::rend in MSVC 2013. When I tried to compile my code using GCC 4.9.1 or clang 3.5.0, both tell me that 'rbegin' and 'rend' are not part of namespace 'std'.
See the code example below. Am I doing something wrong or are they simply not yet implemented in GCC and clang?
// 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 output:
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 output is similar, generated with:
clang++ --std=c++14 test.cpp -o test && ./test
It does work with Clang 3.5 using the -std=c++14 -stdlib=libc++
option. See this Live Example. I think the libstdc++ library support for rbegin()
and rend()
is not yet complete as version 4.9.2 (and it is also not yet implemented in the upcoming gcc 5.0 release).
UPDATE: it now works in the gcc 5.0 trunk release.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With