Ответ 1
Стандарт (в п. 13.4) определяет, что:
Использование перегруженного имени функции без аргументов разрешается в определенные контексты функции, указатель на функцию или указатель на функция-член для определенной функции из набора перегрузки. имя шаблона функции считается названным множеством перегруженных функции в таких контекстах. Выбранная функция - та, которая тип идентичен типу функции целевого типа, требуемому в контекст.
Акцент на мой.
После цитаты есть пример (в § 13.4/5), который похож на ваш:
int f(double);
int f(int);
int (*pfd)(double) = &f; // selects f(double)
int (*pfi)(int) = &f; // selects f(int)
Что касается унарного &
, стандарт указывает, что (в § 5.3.1/6 и благодаря jogojapan):
Адрес перегруженной функции можно использовать только в контексте который однозначно определяет, какая версия перегруженной функции упоминается.
но также можно опустить (в § 13.4/1):
Перегруженному имени функции может предшествовать оператор и.
(опять же, акцент мой), как и вы, в вашем примере.