为什么我不能编译下一个代码?
#include <iterator>
struct test_iterator {
using value_type = int;
};
int main()
{
std::iterator_traits<test_iterator>::value_type a = 0;
return a;
}
似乎所有三个主要编译器(msvc / gcc / clang)都无法编译此代码。
据我所知,std::iterator_traits
的作用类似于:
template <class T>
struct iterator_traits {
using value_type = typename T::value_type;
... // other memebers
};
这里有什么问题?
答案 0 :(得分:4)
来自iterator_traits,因为C ++ 17:
&#34;如果Iterator没有五个成员类型difference_type,value_type,pointer,reference和iterator_category,则此模板没有任何这些名称的成员(
std::iterator_traits
对SFINAE友好)& #34;
提供缺少的类型可修复错误:Demo