次の例のコンパイル:
class A
{
public:
void foo()
{
}
};
class B : private A
{
public:
using A::foo;
};
int main()
{
typedef void (B::*mf)();
mf func = &B::foo;
B b;
(b.*func)();
}
次のエラーで失敗します:
main.cpp||In function ‘int main()’:
main.cpp|18|error: ‘A’ is an inaccessible base of ‘B’
main.cpp|18|error: in pointer to member function conversion
AはBのアクセス可能なベースではないことを理解していますが、using
キーワードを使用しています。関数fooへのアクセスを許可するべきではありませんか?
上記のコンパイルを妨げる規格の関連する段落は何ですか?