Poniższe doesn't compile w brzękiem:Wierzę, że jest to błąd w brzękiem ++ związane z dostępem do funkcji składowej publicznej klasy za
#include <iostream>
void f() { std::cout << "f()\n"; }
struct S {
typedef void(*p)();
operator p() { return f; }
};
int main()
{
S s;
s.operator p()();
}
Plony:
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)(); ^
Ale to powinno , ponieważ wyrażenie s.operator p()()
uzyskuje dostęp do publicznej funkcji składowej obiektu S::s
. Czy czegoś brakuje?
Jeśli się mylę, byłbym wdzięczny za wycenę ze Standardu, który wspierałby odpowiedź.
Twój link powiedział wszystko: * "czy miałeś na myśli" S :: p "?" * –
Proszę wkleić błędy kompilatora do pytania, nie tylko link do nich. – aschepler
Wyszukiwanie nazw dla operatorów konwersji używa dopasowywania typów zamiast dopasowywania leksykalnego (znakowego). Szukanie powiodłoby się, nawet gdybyś powiedział: 's.operator decltype (& f)()()' –