PR c++/89241 - ICE with lambda in template parameter list.
authorJason Merrill <jason@redhat.com>
Wed, 27 Mar 2019 18:39:20 +0000 (14:39 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 27 Mar 2019 18:39:20 +0000 (14:39 -0400)
commit03bed1538f8c71f06dd0afa68713de019595e71e
treed96fdda8e7b4e3ad5ac5f60f34e802ca241c70c1
parentbbf1efe1b46737304cde7b35a95b30d21157e54d
PR c++/89241 - ICE with lambda in template parameter list.

We were getting confused by a lambda in template definition context that
isn't actually in the scope of any templated entity.  Fixed by telling
type_dependent_expression_p that such a lambda is type-dependent even if we
can't tell that from its closure type.  I've also restored the error for
defining a non-lambda class in a default template argument, and for a lambda
befor C++20.

* parser.c (cp_parser_lambda_expression): Also reject a lambda in a
template parameter list before C++20.
* pt.c (type_dependent_expression_p): True for LAMBDA_EXPR.
* semantics.c (begin_class_definition): Restore error about defining
non-lambda class in template parm list.

From-SVN: r269972
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/semantics.c
gcc/testsuite/g++.dg/cpp2a/lambda-uneval10.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/complit16.C [new file with mode: 0644]