Aviso do compilador (nível 1) C4544
'declaration': argumento de modelo padrão ignorado nessa declaração de modelo
Um argumento de modelo padrão foi especificado em um local incorreto e foi ignorado. Um argumento de modelo padrão para um modelo de classe só pode ser especificado na declaração ou definição do modelo de classe, e não em um membro do modelo de classe.
Este exemplo gera C4545, e o exemplo seguinte mostra como corrigi-lo:
// C4544.cpp
// compile with: /W1 /LD
template <class T>
struct S
{
template <class T1>
struct S1;
void f();
};
template <class T=int>
template <class T1>
struct S<T>::S1 {}; // C4544
Neste exemplo, o parâmetro padrão se aplica ao modelo de classe S
:
// C4544b.cpp
// compile with: /LD
template <class T = int>
struct S
{
template <class T1>
struct S1;
void f();
};
template <class T>
template <class T1>
struct S<T>::S1 {};