dcl.typedef/2 сообщает, что using A = struct {}; и typedef struct {} A; должны быть эквивалентны:
A typedef-name can also be introduced by an alias-declaration. ... Such a typedef-name has the same semantics as if it were introduced by the typedef specifier. ...
Дальше можно посмотреть конструкцию typedef struct {} A; на верхнем уровне кода, которая относительно ожидаемо заводит тип A с external linkage из-за правила [basic.link]/4.3](https://eel.is/c++draft/basic.link#4.3). Но, к сожалению, это правило пишет про "typedef declaration", что можно интерпретировать как "typedef declaration, but not alias declaration". То есть using A = struct {}; уже не линкуется.
Предлагаю поправить и поменять в этом месте "typedef declaration" на что-то вроде "typedef declaration or alias declaration". Наверняка захочется зацепить ещё соседние кусочки про enum.
Мелочь, навеянная вот этим вопросом на SO: https://stackoverflow.com/questions/48613758/using-vs-typedef-is-there-a-subtle-lesser-known-difference
dcl.typedef
/2 сообщает, чтоusing A = struct {};
иtypedef struct {} A;
должны быть эквивалентны:Дальше можно посмотреть конструкцию
typedef struct {} A;
на верхнем уровне кода, которая относительно ожидаемо заводит типA
с external linkage из-за правила [basic.link]/4.3
](https://eel.is/c++draft/basic.link#4.3). Но, к сожалению, это правило пишет про "typedef declaration", что можно интерпретировать как "typedef declaration, but not alias declaration". То естьusing A = struct {};
уже не линкуется.Вероятно, GCC этим и занимается: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99931
Предлагаю поправить и поменять в этом месте "typedef declaration" на что-то вроде "typedef declaration or alias declaration". Наверняка захочется зацепить ещё соседние кусочки про
enum
.