template <typename T>
void func(T&){
}
int main(){
void (*p)(int&) = func;//or &func
return 0;
}
Интересно, почему этот код компилируется (с g++). Кажется, аргумент функции шаблона выводится из типа p? Это стандартное поведение?
Изменить: Я придумал возможное объяснение. Это присваивание имеет подпись:
void(*&)(int&)operator=(void(*)(int&));
Таким образом, func фактически выводится из входного аргумента типа operator =, а не из типа p напрямую. Это правильно?