Estoy pasando un puntero para funcionar en una plantilla de función:
int f(int a) { return a+1; } template void use(F f) { static_assert(std::is_function::value, "Function required"); } int main() { use(&f); // Plain f does not work either. }
Pero el argumento de la plantilla F
no es reconocido por is_function
como una función y la aserción estática falla. El mensaje de error del comstackdor dice que F
es int(*)(int)
que es un puntero a la función. ¿Por qué se comporta así? ¿Cómo puedo reconocer la función o el puntero para funcionar en este caso?
F
es un puntero a la función (independientemente de si pasa f
o &f
). Así que quita el puntero:
std::is_function::type>::value
(Irónicamente, std::is_function
;-))