Кажется, это ошибка g cc. В соответствии со стандартом C ++ 20 (6.3.7 Область действия класса)
2 Имя N, используемое в классе S, должно ссылаться на то же объявление в его контексте и при повторной оценке в завершенной области действия S. Для нарушения этого правила не требуется диагностика c.
В этом случае
struct A {};
struct B { using A = A; };
имя B::A
относится к тому же объявлению struct A
.
Вот пример из стандарта C ++, который показывает значение цитаты.
typedef char* T;
struct Y {
T a; // error: T refers to ::T but when reevaluated is Y::T
typedef long T;
T b;
};