C++ · Intermediário · Inglês · Técnico
typename
Palavra-chave usada em templates para declarar parâmetros de tipo e para avisar o compilador de que um nome dependente, como T::value_type, é um tipo e não um valor.
Onde usar
Surge ao escrever templates que usam tipos aninhados de parâmetros, como typename T::iterator. Sem a palavra, o compilador acusa erro, pois assume que o nome é um valor; desde o C++20 ela é opcional em alguns contextos.
Em código
template <typename C>
void primeiro(const C& c) {
typename C::const_iterator it = c.begin();
std::cout << *it;
}Exemplos
You need typename before T::iterator here.
Você precisa de typename antes de T::iterator aqui.
Without typename the compiler thinks value_type is a value.
Sem typename o compilador acha que value_type é um valor.
Cuidado
No parâmetro do template, typename e class são equivalentes; a diferença só importa para nomes dependentes.