https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102257
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think this is the same bug, reduced from Bug 100667 comment 1 (where it wasn't related): struct allocator_arg_t { explicit allocator_arg_t() = default; }; class string{}; class Foo{}; struct tuple { template<typename Alloc> tuple(allocator_arg_t, const Alloc&) { } template<typename = void> tuple(const string&, const Foo&) { } }; tuple bar() { return { {}, Foo{}}; } Clang and EDG accept this.