https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105841
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW CC| |mike at spertus dot com Assignee|jason at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> --- In alias_ctad_tweaks, I wrote: /* This implementation differs from the [standard] in two significant ways: 1) We include all template parameters of A, not just some. 2) The added constraint is same_type instead of deducible. I believe that while it's probably possible to construct a testcase that behaves differently with this simplification, it should have the same effect for real uses. Including all template parameters means that we deduce all parameters of A when resolving the call, so when we're in the constraint we don't need to deduce them again, we can just check whether the deduction produced the desired result. */ This testcase is an example of why my assumption above was wrong. The effect of the transformations specified by the standard would be roughly template <class> struct B_deducible; template <class BT, int BN> struct B_deducible<B<BT,BN>> { }; template <class BT, class... fTs> auto fp(BT, fTs...) -> A<BT, sizeof...(fTs)> requires requires { B_deducible<A<BT,sizeof...(fTs)>>(); }; decltype(fp(0,0)) b(0,0); which works. A year ago, Mike Spertus had a partial fix for this; any update on that?