https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89745
tower120 <tower120 at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from tower120 <tower120 at gmail dot com> --- Sorry, gcc behavior is correct. If empty types should are different - all ok: struct empty{}; struct empty2{}; using Data = void*; using P1 = alternative_pair<Data, empty>; using P2 = alternative_pair<P1, empty2>;