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

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:e3b60da8e07030b1417067295f047b25015f21f2

commit r10-6330-ge3b60da8e07030b1417067295f047b25015f21f2
Author: Marek Polacek <pola...@redhat.com>
Date:   Wed Jan 29 12:02:14 2020 -0500

    c++: Fix template arguments comparison with class NTTP [PR91754]

    Here we fail to compile the attached test, stating that the use of
    T<s> in T<s>::T() {} is "invalid use of incomplete type".  It is a
    function definition so grokdeclarator checks that the qualifying type
    is complete.

    When we parsed the class T, finish_struct gave the class a non-null
    TYPE_SIZE, making it COMPLETE_TYPE_P.  But then we're parsing T<s>,
    a TEMPLATE_ID, in

      T<s>::T() {}

    so try to lookup_template_class T.  This failed because we couldn't
    find such a class: comp_template_args told us that the argument lists
    don't match, because one of the args was wrapped in a VIEW_CONVERT_EXPR
    to make it look const.  It seems to me that we should see through
    these artificial wrappers and consider the args same.

    2020-01-29  Marek Polacek  <pola...@redhat.com>

        PR c++/91754 - Fix template arguments comparison with class NTTP.
        * pt.c (class_nttp_const_wrapper_p): New.
        (template_args_equal): See through class_nttp_const_wrapper_p
        arguments.

        * g++.dg/cpp2a/nontype-class30.C: New test.

Reply via email to