Следующий не компилирует в clang:
#include <iostream>
void f() { std::cout << "f()\n"; }
struct S {
typedef void(*p)();
operator p() { return f; }
};
int main()
{
S s;
s.operator p()();
}
Урожайность:
main.cpp:13:16: error: unknown type name 'p'; did you mean 'S::p'? s.operator p()(); ^ S::p main.cpp:6:19: note: 'S::p' declared here typedef void(*p)(); ^
Но он должен, поскольку выражение s.operator p()()
обращается к публичной функции-члену объекта S::s
. Я что-то пропустил?
Если я ошибаюсь, я был бы признателен за цитату из стандарта, поддерживающего ответ.