Não é possível acessar o membro protegido da classe base na classe derivada

Eu tenho o seguinte código:

struct A {
protected:
    A() {}

    A* a;
};

struct B : A {
protected:
    B() { b.a = &b; }

    A b;
};

Estranhamente não compila. O culpado é ob.a = &b; tarefa: tanto o GCC quanto o clang reclamam queA() está protegido, o que não deve ser um problema porque B herda A. Qual canto escuro do padrão eu entrei?

questionAnswers(4)

yourAnswerToTheQuestion