Совершенно полный ответ, но я возьму ответ @Johannes, так как он объясняет немного больше о позднем разборе. +1 хотя. :)

т вопросАскер имеет следующую функцию:Почему не

template<typename ITER>
bool nextPermutation(ITER start, ITER end)
{
    return nextPermutation(start, end, std::iterator_traits<ITER>::iterator_category());
}

 необходимо доtypename? Я думал, что это было необходимо для вложенных типов шаблона, если шаблон зависит от самого параметра шаблона? GCC, кажется, поддерживает мою идею, так как она не компилируется под обоимиstd::iterator_traits4.3.4 а также4.5.1требуя, Несмотря на это, он все равно прекрасно компилируется как в Visual Studio 2008, так и в 2010 году.typenameЭто просто еще одно расширение / ошибка Visual Studio, о которой я не знаю?
Или это на самом деле можно сделать вывод, что
 является либо типом, либо функцией, потому что за ней следует пара круглых скобокiterator_category? (Смотрите сообщения @ DeadGM()начиная здесь.) Так это может быть на самом деле ошибка в GCC?В дополнение к перечисленным опциям (конструктор и функция),

Ответы на вопрос(2)

Ваш ответ на вопрос