mira el siguiente código de prueba:La elección entre instancias de plantilla con argumentos puntero
template<class T> struct Wrap {};
template<typename T> inline
void fun (T *&Int) // **choice 1**
{}
template<typename T> inline
void fun (Wrap<T> *&Int) // **choice 2**
{}
int main()
{
int i = 6;
fun((char*&)(i)); // **call 1**
fun((Wrap<char>*&)(i)); // **call 2**
}
Cuando ejecuto este código en Linux g ++, que funciona de acuerdo con las expectativas. Cuando se llama a fun() con char * &, llama a la función de elección 1 directamente. Sin embargo, estoy interesado cuando llamamos a fun() con Wrap < char> * & y llama a la opción 2. Aunque las opciones 1 y 2 son válidas para la segunda llamada, el compilador elige una mejor contendiente -> choice 2 (porque existe).
Pregunta: ¿Se garantiza que, el mismo comportamiento se mantendrá para cualquier otro compilador para C++? Si no, ¿hay alguna otra alternativa para hacerlo determinista?
el 'en línea' es casi inútil en las funciones de la plantilla. No es necesario porque son plantillas (no especializadas) por lo que no causará un error de enlazador y el compilador es mucho mejor que nosotros para determinar cuándo alinear y cuándo no ... y puede ignorar perfectamente su solicitud. –