Из [class.access]/7 мы имеем следующее предложение:
Аналогично, использование
A::B
в качестве базового спецификатора хорошо сформировано потому чтоD
получается изA
, поэтому проверка базовых спецификаторов должна отложить до тех пор, пока не будет просмотрен весь список-спецификатор базы.
class A {
protected:
struct B { };
};
struct D: A::B, A { };
Смотрите живой пример с clang. На самом деле, clang также жалуется на этот фрагмент, где отсрочка не требуется.
class A {
protected:
struct B { };
};
struct D: A, A::B { };
Почему этот код не компилируется?
PS: gcc и VS21013 также не компилируют коды.