19
template <size_t size, typename ...Params> 
void doStuff(Params...) { 
} 

template <> 
void doStuff<size_t(1), int, bool>(int, bool) { 

} 

int main(int, char**) { 
    doStuff<1,int,bool>(1, false); 
    return 0; 
} 

Esto no se compila, la segunda declaración doStuff me da error: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration pero coincide claramente con la primera declaración con argumentos de plantilla variadic.Especialización de plantilla con plantillas variadic

¿Cómo especializar plantillas variadic?

Respuesta

12

La sintaxis es correcta (afaik y clang ++ la aceptan), pero su compilador probablemente aún no esté up2date.

Si utiliza gcc, su soporte de plantilla variadic es bastante incompleto, e incluso las versiones svn muy recientes todavía no admiten la especialización (así es como se usa la tecnología de punta y lamentablemente gcc implementó solo una muy la propuesta inicial de plantilla variadic incompleta y desde entonces no se mantuvo mucho, mientras que el clang comenzó bastante tarde, pero se completó bastante)

+0

Uso gcc 4.5.2. Gracias por su respuesta (ahora estoy usando sobrecarga de plantilla). – coyotte508

+0

lo mismo vale para 4.6.1, es decir, no es compatible con esa versión tampoco ... – Nim

+0

Como alternativa, puede ajustar la función en una plantilla '<..> struct Do {static void Stuff (..) {}};'. –

Cuestiones relacionadas