https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100374

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppa...@gcc.gnu.org>:

https://gcc.gnu.org/g:43c013df02fdb07f9b7a5e7e6669e6d69769d451

commit r13-981-g43c013df02fdb07f9b7a5e7e6669e6d69769d451
Author: Patrick Palka <ppa...@redhat.com>
Date:   Fri Jun 3 09:29:12 2022 -0400

    c++: don't substitute TEMPLATE_PARM_CONSTRAINTS [PR100374]

    This patch makes us avoid substituting into the TEMPLATE_PARM_CONSTRAINTS
    of each template parameter except as necessary for declaration matching,
    like we already do for the other constituent constraints of a declaration.

    This patch also improves the CA104 implementation of explicit
    specialization matching of a constrained function template inside a
    class template, by considering the function's combined constraints
    instead of just its trailing constraints.  This allows us to correctly
    handle the first three explicit specializations in concepts-spec2.C
    below, but because we compare the constraints as a whole, it means we
    incorrectly accept the fourth explicit specialization which writes #3's
    constraints in a different way.  For complete correctness here,
    determine_specialization should use tsubst_each_template_parm_constraints
    and template_parameter_heads_equivalent_p.

            PR c++/100374

    gcc/cp/ChangeLog:

            * pt.cc (determine_specialization): Compare overall constraints
            not just the trailing constraints.
            (tsubst_each_template_parm_constraints): Define.
            (tsubst_friend_function): Use it.
            (tsubst_friend_class): Use it.
            (tsubst_template_parm): Don't substitute TEMPLATE_PARM_CONSTRAINTS.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/concepts-spec2.C: New test.
            * g++.dg/cpp2a/concepts-template-parm11.C: New test.

Reply via email to