错误:“make_reverse_iterator”不是“std”的成员

3
我将尝试编译一个使用std::make_reverse_iterator的C++程序,但是我得到了标题错误。这个参考文献说自C++14起确实支持该函数,因此我添加了标志-std=c++14,但仍然不起作用。我已经挖掘了一段时间,但无法弄清楚为什么会发生这种情况。有任何想法吗?我的编译器版本是g++ 4.9.2。
以下是一个简单的程序(取自上述参考文献),用于编译它的命令以及程序的输出。
test.cpp:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>

int main() {
    auto v = std::vector<int>{ 1, 3, 10, 8, 22 };

    std::sort(v.begin(), v.end());
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));

    std::cout << '\n';

    std::copy(
        std::make_reverse_iterator(v.end()), 
        std::make_reverse_iterator(v.begin()),
        std::ostream_iterator<int>(std::cout, ", "));
}

编译器:

g++ -std=c++14 test.cpp -o test

输出:

test.cpp: In function ‘int main()’:

test.cpp:15:9: error: ‘make_reverse_iterator’ is not a member of ‘std’
         std::make_reverse_iterator(v.end()), 
         ^

test.cpp:16:9: error: ‘make_reverse_iterator’ is not a member of ‘std’
         std::make_reverse_iterator(v.begin()),

2
什么编译器版本?我尝试了几个版本,你的代码可以编译通过。 - Barry
@Barry 编译器版本是 g++ 4.9.2。在描述中已更新。 - PotatoBoy
1个回答

3

make_reverse_iterator()是由LWG 2285引入的,直到2014年12月才添加到libsdtc++中。它在5.1版本及以上都有。4.9.2版本还不支持该函数。因此,如果可能的话,请升级。

如果不可能升级,则可以通过复制cppreference实现自行添加此功能:

template< class Iterator >
std::reverse_iterator<Iterator> make_reverse_iterator(Iterator i)
{
    return std::reverse_iterator<Iterator>(i);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接