On Wed, 11 Sep 2024, Patrick Palka wrote:

> On Wed, 11 Sep 2024, Patrick Palka wrote:
> 
> > On Wed, 4 Sep 2024, Marek Polacek wrote:
> > 
> > > On Wed, Sep 04, 2024 at 10:58:25AM -0400, Jason Merrill wrote:
> > > > On 9/3/24 6:12 PM, Marek Polacek wrote:
> > > > > Bootstrapped/regtested on x86_64-pc-linux-gnu, ok for trunk/14?
> > > > 
> > > > The change to return bool seems like unrelated cleanup; please push that
> > > > separately on trunk only.
> > > 
> > > Done.
> > >  
> > > > > +       /* We can also have:
> > > > > +
> > > > > +           template <template <typename T, typename T::type TT> 
> > > > > typename X>
> > > > > +           void func() {}
> > > > > +           template <typename U, int I>
> > > > > +           struct Y {};
> > > > > +           void g() { func<Y>(); }
> > > > > +
> > > > > +          where we are not in a template, but the type of PARM is 
> > > > > T::type
> > > > > +          and dependent_type_p doesn't want to see a 
> > > > > TEMPLATE_TYPE_PARM
> > > > > +          outside a template.  */
> 
> ... so the patch LGTM, except I'd prefer to not have this comment
> containing an embedded specific testcase.  IMHO it's "understood" that
> processing_template_decl needs to be set when substituting using an
> incomplete set of arguments since in that case the result must be
> templated.

... and the comment might make this instance of the pattern seem more
like an exceptional case rather than a general rule, which paradoxically
could make the code seem more complex than it is at first glance.

> 
> > > > > +       ++processing_template_decl;
> > > > >         tree t = tsubst (TREE_TYPE (parm), outer_args, complain, 
> > > > > in_decl);
> > > > > +       --processing_template_decl;
> > > > >         if (!uses_template_parms (t)
> > > > >             && !same_type_p (t, TREE_TYPE (arg)))
> > > > 
> > > > This looks like the pattern Patrick just removed from 
> > > > type_unification_real
> > > > for PR101463.  Do we want to make the same change here?
> > 
> > The pattern does seem similar, but I can't see the benefit of making the
> > same change here.  In type_unification_real the change made dependent vs
> > non-dependent deduction more uniform by removing the dependence tests.
> > 
> > But nothing can be made more uniform here AFAICT.  At best we can use
> > find_template_parameters to see if 'parm' depends on outer template
> > parameters and avoid the substitution if so.  But both uses_template_parms
> > tests need to remain, I think.  Even if 'parm' doesn't depend on outer
> > template parameters, it seems we still want to succeed if it's overall
> > dependent as in the testcase from the PR.  Likewise if 'arg' is overall
> > dependent and 'parm' isn't.
> > 
> > > 
> > > Interesting.  Sorry, this may be silly, but I'm not sure I can do that
> > > here: find_template_parameters wants "the template parameters in scope"
> > > but I don't think I have that here.
> > 
> > You could probably pass the DECL_TEMPLATE_PARMS of parm_tmpl or arg_tmpl
> > of its caller.
> > 
> 

Reply via email to