¿Por qué es la salida de este code:Especializada plantilla de función de los tipos de referencia
#include <iostream>
template<typename T> void f(T param)
{
std::cout << "General" << std::endl ;
}
template<> void f(int& param)
{
std::cout << "int&" << std::endl ;
}
int main()
{
float x ; f (x) ;
int y ; f (y) ;
int& z = y ; f (z) ;
}
es
general
general
general
La tercera se surprizing porque la función fue especializada exactamente f o int&
Editar: Sé que la sobrecarga podría ser una solución adecuada. Solo quiero aprender la lógica detrás de esto.
Tal vez porque const int y se prefiere a int & – Septagram
@Septagram: const int &? –
No sé si ayuda, pero si cambia la plantilla para aceptar un 'T &', entonces tanto 'f (y)' como 'f (z)' llaman a la versión 'int &'. –