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

--- Comment #3 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:d3d205ab440886164b6de2be2a2efa10cac95b66

commit r13-6380-gd3d205ab440886164b6de2be2a2efa10cac95b66
Author: Patrick Palka <ppa...@redhat.com>
Date:   Tue Feb 28 15:05:30 2023 -0500

    c++: non-dependent variable template-id [PR108848]

    Here we're treating deeming the non-dependent variable template-id
    tag<int> as dependent ever since r226642 gave variable TEMPLATE_ID_EXPR
    an empty type, which causes the call to finish_template_variable from
    finish_id_expression_1 to be unreachable at template parse time.  Thus
    we're led into thinking tag<int>.var<void> refers to a dependent name.

    This patch fixes this by making finish_id_expression_1 instantiate a
    variable template-id as long as it's not dependent according to the
    dependence test in lookup_and_finish_template_variable rather than
    according to type_dependent_expression_p.

            PR c++/108848

    gcc/cp/ChangeLog:

            * pt.cc (finish_template_variable): Move dependence check
            to here from ...
            (lookup_and_finish_template_variable): ... here.
            * semantics.cc (finish_id_expression_1): Call
            finish_template_variable sooner, before (and regardless of) the
            type_dependent_expression_p test.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp1y/noexcept1.C: Don't expect a bogus "different
            exception specifier" error.  Expect a separate "not usable
            in a constant expression" error.
            * g++.dg/cpp1y/var-templ75.C: New test.
            * g++.dg/cpp1y/var-templ76.C: New test.

Reply via email to