在这个问题中,提问者有以下函数:
为什么在
这只是我不知道的另一个Visual Studio扩展/错误吗?
还是实际上可以推断出
template<typename ITER>
bool nextPermutation(ITER start, ITER end)
{
return nextPermutation(start, end, std::iterator_traits<ITER>::iterator_category());
}
为什么在
std::iterator_traits
之前不需要typename
? 我认为如果模板本身依赖于模板参数,则需要嵌套类型的typename
。 GCC似乎支持我的想法,因为它在4.3.4和4.5.1下都无法编译,要求使用typename
。即使如此,在Visual Studio 2008和2010下仍然可以编译正常。这只是我不知道的另一个Visual Studio扩展/错误吗?
还是实际上可以推断出
iterator_category
是类型或函数,因为它后面跟着一对括号()
?(请参见@DeadGM的消息从这里开始。)那么这可能实际上是GCC中的一个错误吗?
iterator_category
可以是定义了 operator() 的类型的静态成员变量。 - Sjoerd