template <typename T>
void func(T&){
}
int main(){
void (*p)(int&) = func;//or &func
return 0;
}
Je me demande pourquoi ce code est compilé (avec g ++). Il semble que l’argument de la fonction template soit déduit du type de p? Est-ce que ce comportement standard?
Modifier: Je suis venu avec une explication possible. Cette cession a une signature:
void(*&)(int&)operator=(void(*)(int&));
Donc, func est en fait déduit de l'argument d'entrée du type opérateur =, plutôt que du type de p directement. Est-ce exact?