В следующем коде С++ 11:
void f(int) {}
void f(double) {}
void (*p)(int) = f;
Есть две функции.
Третий идентификатор f
- это id-выражение и инициализатор p
.
В 5.1.1p8 [expr.prim.general]/8 говорится:
Тип [id-expression] - это тип идентификатора. Результатом является объект, обозначенный идентификатором. Результатом является lvalue, если объект является функцией, переменной или элементом данных и в противном случае значением prvalue.
Учитывая, что f
может ссылаться на два разных объекта с двумя разными типами, нет "объекта" или "типа".
Есть ли какой-нибудь другой текст в стандарте, который обращается к этой ситуации?
Реализации просто устраняют это как расширение или что-то требуется? (Без какого-либо другого текста можно утверждать, что реализация может отклонить выражение f id как неоднозначное.)