https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92590
--- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> --- This is a consequence of the change Jonathan cites, to treat the inherited constructor as a user-declared constructor that prevents the implicit declaration of a default constructor in Derived. The difference in access behavior follows from this; the standard says, "A synonym created by a using-declaration has the usual accessibility for a member-declaration. A using-declarator that names a constructor does not create a synonym; instead, the additional constructors are accessible if they would be accessible when used to construct an object of the corresponding base class, and the accessibility of the using-declaration is ignored." So if constructing 'd' calls the inherited constructor, it's ill-formed; if it calls the implicitly-declared default constructor, it's well-formed. I thought my change was an obvious bug fix, but it seems that other compilers have the old semantics, so I should probably undo it.