On Fri, 14 Mar 2025 at 00:04, Ville Voutilainen <ville.voutilai...@gmail.com> wrote: > > On Fri, 14 Mar 2025 at 00:03, Ville Voutilainen > <ville.voutilai...@gmail.com> wrote: > > > > On Thu, 13 Mar 2025 at 23:57, Jonathan Wakely <jwak...@redhat.com> wrote: > > > > Do we also want to constraint the tuple(const _Elements&...) > > > > constructor with requires sizeof...(_Elements) >= 1, which is present > > > > on the C++17 version? > > > > > > Oh we don't need that constraint, because we have an explicit > > > specialization for tuple<>. > > > > Are.. ..you sure? What about CTAD? That will look into the primary > > template only, and will perform its madness based on that > > and nothing else. > > Oh, but CTAD would fail if there's no arguments passed. > > So.. maybe we never needed that constraint, and the only reason I > added it was not trusting my (or anyone else's) understanding > of partial ordering and overload resolution.
Chances are of course that that's not it, and there's been some over-eagerness in the compiler to instantiate those declarations for the template/specialization overload resolution, and then some of the original meta-helpers were instantiated with empty packs. They didn't like that. We used that constraint to send that evaluation to the false-case of what's now _TupleConstraints.