2011-05-20 9 views

Respuesta

9

test<std::string> (nota: sin paréntesis al final) produciría lo que esperaba.

escritura como test<std::string()> una instancia de la plantilla con el tipo "función sin argumentos y devolver std :: string"

2

¿Quiso decir invocar la función como: test<std::string>()?

En su test<std::string()>(), el parámetro de plantilla no es std::string sino un tipo de función (función sin argumentos y devolver std::string).

0

std::string() es una typeid. Un typeid es una declaración simple con la identificación del declarante faltante.

En un argumento de plantilla, si hay una ambigüedad entre un ID de tipo y una expresión, la llamada se resuelve en un ID de tipo. Por lo que sus salidas de código 1

Es necesario eliminar los paréntesis () con el fin de conseguir que la salida 2 es decir foo<std::string>() le daría salida 2.

+0

¿Por qué un downvote? –

Cuestiones relacionadas