Компиляция следующего примера:
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?
Каковы соответствующие параграфы в стандарте, которые предотвращают компиляцию вышеуказанного?