打ち鳴らすの以下のdoesn't compileに関連打ち鳴らすのバグ++であると考えている:私はこれがクラスのパブリックメンバ関数へのアクセス
#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
のパブリックメンバー関数にアクセスするためです。何か不足していますか?
私が間違っている場合は、答えをサポートしている標準の見積もりに感謝します。
あなたのリンクはすべて言った:* "あなたは 'S :: p'を意味しましたか?" * –
コンパイラのエラーを質問に貼り付けてください。 – aschepler
変換演算子の名前ルックアップでは、字句(文字)マッチングではなくタイプマッチングが使用されます。 's.operator decltype(&f)()()' –