быть полезным, это не так. Как говорит Rakete1111, вы сосредотачиваетесь на том аспекте, который OP вообще не заботился.

е знаем членов, указанныхprotected из базового класса можно получить доступ только из собственного экземпляра производного класса. Это особенность стандарта, и она неоднократно обсуждалась при переполнении стека:

Невозможно получить доступ к защищенному члену другого экземпляра из области видимости производного типа;Почему мой объект не может получить доступ к защищенным членам другого объекта, определенного в общем базовом классе?И другие.

Но кажется возможным обойти это ограничение с помощью указателей на членов, как пользователь chtzпоказал мне:

struct Base { protected: int value; };
struct Derived : Base
{
    void f(Base const& other)
    {
        //int n = other.value; // error: 'int Base::value' is protected within this context
        int n = other.*(&Derived::value); // ok??? why?
        (void) n;
    }
};

Живая демоверсия на колиру

Почему это возможно, это желаемая функция или сбой в реализации или формулировке Стандарта?

Из комментариев возник еще один вопрос:еслиDerived::f называется с фактическимBaseэто неопределенное поведение?

Ответы на вопрос(4)

Ваш ответ на вопрос