c++: Fix member alias template in C++17 and up. [PR96805]
authorJason Merrill <jason@redhat.com>
Thu, 8 Oct 2020 19:43:26 +0000 (15:43 -0400)
committerJason Merrill <jason@redhat.com>
Thu, 8 Oct 2020 20:53:36 +0000 (16:53 -0400)
commit1c56c143b2011080d8a4516f37f78f647b0ee258
treedf642e8801773353a8f4fa3b542fc18e41361671
parenta500588aa523f1f04ae51809e476e3ebfcb081d3
c++: Fix member alias template in C++17 and up. [PR96805]

Here we're trying to push into a<T>::c<N> in order to instantiate t<N>, but
were building a TYPENAME_TYPE for it because a<T> isn't open yet.  Don't
do that when we know we're trying to enter the scope.

gcc/cp/ChangeLog:

PR c++/96805
PR c++/96199
* pt.c (tsubst_aggr_type): Don't build a TYPENAME_TYPE when
entering_scope.
(tsubst_template_decl): Use tsubst_aggr_type.

gcc/testsuite/ChangeLog:

PR c++/96805
* g++.dg/cpp0x/alias-decl-pr96805.C: New test.
gcc/cp/pt.c
gcc/testsuite/g++.dg/cpp0x/alias-decl-pr96805.C [new file with mode: 0644]