std::rbegin 和 std::rend 在 GCC 4.9 和 clang 3.5 中的功能
std::rbegin and std::rend function in GCC 4.9 and clang 3.5
我一直在 MSVC 2013 中使用 std::rbegin 和 std::rend。当我尝试使用 GCC 4.9.1 或 clang 3.5.0 编译我的代码时,两者都告诉我 'rbegin' 和 'rend' 不是命名空间 'std'.
的一部分
参见下面的代码示例。是我做错了什么,还是它们还没有在 GCC 和 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 输出:
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 输出类似,生成方式:
clang++ --std=c++14 test.cpp -o test && ./test
它使用 -std=c++14 -stdlib=libc++
选项与 Clang 3.5 一起工作。请参阅此 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 版本)。
更新:它现在可以在 gcc 5.0 主干版本中使用。
我一直在 MSVC 2013 中使用 std::rbegin 和 std::rend。当我尝试使用 GCC 4.9.1 或 clang 3.5.0 编译我的代码时,两者都告诉我 'rbegin' 和 'rend' 不是命名空间 'std'.
的一部分参见下面的代码示例。是我做错了什么,还是它们还没有在 GCC 和 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 输出:
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 输出类似,生成方式:
clang++ --std=c++14 test.cpp -o test && ./test
它使用 -std=c++14 -stdlib=libc++
选项与 Clang 3.5 一起工作。请参阅此 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 版本)。
更新:它现在可以在 gcc 5.0 主干版本中使用。