Por que o nome do tipo _não_ é necessário aqui no Visual Studio 2008/2010?
Emessa questã, o autor da pergunta tem a seguinte função:
template<typename ITER>
bool nextPermutation(ITER start, ITER end)
{
return nextPermutation(start, end, std::iterator_traits<ITER>::iterator_category());
}
Por que não é umtypename
necessário antes dostd::iterator_traits
? Eu pensei que era necessário para tipos aninhados de um modelo, se o modelo é dependente de um parâmetro de modelo em si? O GCC parece apoiar minha ideia, pois não é compilado nos dois 4.3.4 e 4.5.1, exigindo umtypename
. Mesmo assim, ele ainda compila muito bem no Visual Studio 2008 e 2010.
Essa é apenas outra extensão / bug do Visual Studio que eu não conheço?
Ou é realmente possível deduzir queiterator_category
é um tipo ou uma função porque é seguido por um par parêntese()
? (Veja as mensagens de @ DeadGM começando aqui.) Então isso é realmente um bug no GCC?