【发布时间】:2017-09-06 15:41:39
【问题描述】:
为什么我不能编译下一个代码?
#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
};
这里有什么问题?
【问题讨论】:
-
From iterator_traits since C++17: "如果Iterator没有五种成员类型differ_type、value_type、pointer、reference和iterator_category,那么这个模板没有任何成员这些名称中的一个(std::iterator_traits 对 SFINAE 友好)"