boost :: flat_set的迭代器无法合并

时间:2018-08-20 10:02:21

标签: c++ boost iterator c++17

我正在尝试将boost::flat_set用于我需要唯一的少量迭代器。由于对make_reverse_iterator的调用不明确,因此代码无法编译,但是我不确定它是如何发生的。我试图将问题简化为MWE:

#include <boost/container/flat_set.hpp>
#include <set>
#include <iostream>

using Set = std::set<int>;
using SetIt = Set::iterator;

struct Comparator {
    bool operator()(SetIt lhs, SetIt rhs) const {
        return &(*lhs) < &(*rhs);
    }
};


int main() {
    std::set<int> x;
    boost::container::flat_set<Set::iterator, Comparator> a;
    boost::container::flat_set<Set::iterator, Comparator> b;

    a.insert(x.insert(1).first);
    a.insert(x.insert(2).first);
    a.insert(x.insert(3).first);
    a.insert(x.insert(4).first);
    a.insert(x.insert(5).first);

    b.insert(x.insert(3).first);
    b.insert(x.insert(4).first);
    b.insert(x.insert(5).first);
    b.insert(x.insert(6).first);
    b.insert(x.insert(7).first);

    a.merge(b);

    for (auto v : a)
        std::cout << *v << '\n';
    return 0;
}

1 个答案:

答案 0 :(得分:3)

此问题显然是 fixed in Boost 1.67

我在 fixed in Boost 1.66 上再现了错误。