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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Simon Martin <simar...@gcc.gnu.org>:

https://gcc.gnu.org/g:26ee954476bef7328d2cf45928c3c9b84df77178

commit r15-3195-g26ee954476bef7328d2cf45928c3c9b84df77178
Author: Simon Martin <si...@nasilyan.com>
Date:   Sun Aug 25 21:59:31 2024 +0200

    c++: Check template parameters in member class template specialization
[PR115716]

    We currently ICE upon the following invalid code, because we don't check
    that the template parameters in a member class template specialization
    are correct.

    === cut here ===
    template <typename T> struct x {
      template <typename U> struct y {
        typedef T result2;
      };
    };
    template<> template<typename U, typename> struct x<int>::y {
      typedef double result2;
    };
    int main() {
      x<int>::y<int>::result2 xxx2;
    }
    === cut here ===

    This patch fixes the PR by calling redeclare_class_template.

            PR c++/115716

    gcc/cp/ChangeLog:

            * pt.cc (maybe_process_partial_specialization): Call
            redeclare_class_template.

    gcc/testsuite/ChangeLog:

            * g++.dg/template/spec42.C: New test.
            * g++.dg/template/spec43.C: New test.

Reply via email to