Pregunta

GCC no parece aprobar de plantillas con las clases locales instanciando:

template <typename T>
void f(T);

void g()
{
    struct s {};

    f(s()); // error: no matching function for call to 'f(g()::s)'
}

VC no se queja.

¿Cómo debe hacerse?

¿Fue útil?

Solución

En C ++ 03 no se puede hacer, C ++ 0x voluntad ascensor que la restricción aunque.

C ++ 03, §14.3.1 / 2

  

A de tipo local, un tipo sin vinculación, un tipo sin nombre o un tipo de compuesto de cualquiera de estos tipos no se pueden utilizar como una plantilla-argumento para un tipo-parámetro de plantilla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top