Um detalhe confuso sobre o Most Vexing Parse
Minha pergunta é como a seguinte linha pode ser analisada como uma declaração de função:
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Entendo a maioria dos detalhes do Most Vexing Parse e por que o segundo iterador temporário pode ser interpretado como um tipo que é uma função retornando um iterador e sem argumentos, mas o que não entendo é por que o primeiro iterador temporário pode ser interpretado como um tipo. Que tipo representa? Meu pensamento é que seria algum tipo de função, mas não consigo ver como o nomecin
se acostuma. Está declarando que o parâmetro é umistream_iterator<int>
namedcin
? Em caso afirmativo, isso significa que você pode colocar entre parênteses arbitrariamente os nomes dos argumentos nas funções? E se sim, por quê?