C++ 在标准库中是否有用于比较迭代器类别的工具

Does C++ have facilities in standard library for comparing iterator categories

我希望 static_assert 提供给我函数的容器具有双向或更强的迭代器。 我知道如何做到这一点的唯一方法是比较它不是较弱的迭代器之一。

    static_assert(! std::is_same<typename std::iterator_traits<typename C1::iterator>::iterator_category, std::input_iterator_tag>::value,"");
    static_assert(!std::is_same<typename std::iterator_traits<typename C1::iterator>::iterator_category, std::forward_iterator_tag>::value, "");
//TODO:add check it is not output iter....

有什么方法可以说 iterator_category 是比迪还是更强?

标签相互继承(所以random继承自bidirectional,bidirectional继承forward,input继承input)。

因此,您可以执行以下操作(当然仍然相当长..)

static_assert(std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename C1::iterator>::iterator_category>::value, "");

iterator_category 的五种可能类型是 input_iterator_tagoutput_iterator_tagforward_iterator_tagbidirectional_iterator_tagrandom_access_iterator_tag

既然你已经在使用其中两个,我想你可以使用其他的。