【发布时间】:2014-11-13 02:43:21
【问题描述】:
以下创建用户定义的迭代器类别标签的程序被clang(使用-stdlib=libc++)拒绝,但不会被其他编译器和标准库实现拒绝:
#include <iterator>
struct my_iterator_tag {};
struct my_iterator : std::iterator<my_iterator_tag, int> {};
int main()
{
std::iterator_traits<my_iterator>::value_type x;
return 0;
}
我不清楚 C++ 标准是否禁止使用具有非标准迭代器类别的迭代器类型实例化 std::iterator_traits。
这个程序非法吗?
clang 的输出(使用 libc++ 时)如下:
$ clang -stdlib=libc++ test.cpp
test.cpp:9:38: error: no type named 'value_type' in 'std::__1::iterator_traits<my_iterator>'
std::iterator_traits<my_iterator>::value_type x;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
1 error generated.
【问题讨论】: