我想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都是比迪或更强?
答案 0 :(得分:2)
标签彼此继承(因此随机从双向继承,继承自forward,从输入继承)。
因此,您可以执行以下操作(当然还是相当长的时间......)
static_assert(std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename C1::iterator>::iterator_category>::value, "");
答案 1 :(得分:0)
五种可能的iterator_category
类型有input_iterator_tag
,output_iterator_tag
,forward_iterator_tag
,bidirectional_iterator_tag
和random_access_iterator_tag
。
由于您已经使用其中两种,我认为您可以使用其他的。