重複の可能性:
括弧で囲まれたメンバー関数のアドレスのエラー
この最近の質問では、メンバー関数名が括弧で囲まれている場合、OP はメンバー関数のアドレスを取得することを違法にする C++ 言語の奇妙な規定に遭遇しました。たとえば、次のコードは違法です。
struct X {
void foo();
};
int main() {
void (X::* ptr)();
ptr = &(X::foo); // Illegal; must be &X::foo
}
これを調べたところ、C++ ISO 仕様の §5.3.1/3 が原因であることがわかりました。
メンバーへのポインターは、明示的な & が使用され、そのオペランドが括弧で囲まれていない修飾 ID である場合にのみ形成されます [...]
仕様にこのルールがある理由を知っている人はいますか? メンバーへのポインタに固有のものであるため、これで解決される文法上のあいまいさがあると思われますが、正直なところ、それが何であるかはまったくわかりません。