https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116276
--- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> --- In C++20 mode it works because of the default ctor guide [over.match.class.deduct]/1.2: "If C is not defined or does not declare any constructors, an additional function template derived as above from a hypothetical constructor C()." I guess a ctor using-decl isn't considered a ctor decl, so we go ahead and include a default ctor guide, which ultimately is viable. In C++23 mode we see two viable guide candidates, the default ctor guide for Derived and the default ctor guide for Base1 (we don't see the Base2 using-decl), and overload resolution fails with ambiguity due to the unimplemented tiebreaker.