Доступ к элементам из A
регулируется главой 11 "Контроль доступа к элементам", но преобразования указателя в элемент рассматриваются в 4.11. В частности, 4.11 / 2 гласит, что вы не можете преобразовать T A::*
в T B::*
, если вы не можете преобразовать B*
в A*
.
Вот небольшой вариант вопроса:
class A
{
public:
void foo()
{
}
};
class B : private A
{
public:
using A::foo;
};
int main()
{
typedef void (A::*amf)();
typedef void (B::*bmf)();
amf func = &A::foo;
bmf f2 = static_cast<bmf>(func);
}
Мы все еще говорим о той же функции. Не поиск по имени B::foo
не удался (using
позаботился об этом), это факт, что тип B::foo
это void A::*()
, который не может быть преобразован в void B::*()
.