【发布时间】:2011-04-15 23:18:32
【问题描述】:
在this question中,asker有如下功能:
template<typename ITER>
bool nextPermutation(ITER start, ITER end)
{
return nextPermutation(start, end, std::iterator_traits<ITER>::iterator_category());
}
为什么在std::iterator_traits 之前不需要typename?我认为模板的嵌套类型需要它,如果模板依赖于模板参数本身? GCC 似乎支持我的想法,因为它不能在4.3.4 和4.5.1 下编译,需要typename。即便如此,它在 Visual Studio 2008 和 2010 下仍然可以正常编译。
这只是我不知道的另一个 Visual Studio 扩展/错误吗?
或者实际上可以推断出iterator_category 是一个类型还是一个函数,因为它后面跟着一对括号()? (请参阅@DeadGM 的消息starting here。)那么这实际上可能是 GCC 中的一个错误吗?
【问题讨论】:
-
除了您列出的选项(构造函数和函数)之外,
iterator_category可以是定义 operator() 的类型的静态成员变量。 -
@Sjoerd:或者一个函数指针。
标签: c++ visual-studio typename