错误:'make_reverse_iterator'不是'std'的成员

时间:2018-05-03 17:55:58

标签: c++ g++ c++14

我试图编译一个使用std :: make_reverse_iterator的c ++程序,但是我得到了标题错误。 reference表示自c ++ 14以来确实支持该函数,所以我添加了标志-std = c ++ 14,但仍然没有骰子。我已经挖了一段时间,无法弄清楚为什么会这样。有任何想法吗?我的编译器版本是g ++ 4.9.2

这是一个简单的程序(取自上面的ref),用于编译它的命令,以及程序的输出。

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()),

1 个答案:

答案 0 :(得分:2)

make_reverse_iterator()作为LWG 2285的结果添加,并且在December 2014之前未添加到libsdtc ++中。这是在5.1发布,以及那里的一切。 4.9.2现在还为时尚早。如果可能的话,只需升级即可。

如果不可能,只需复制cppreference implementation

即可自行添加
template< class Iterator >
std::reverse_iterator<Iterator> make_reverse_iterator(Iterator i)
{
    return std::reverse_iterator<Iterator>(i);
}