8sa1-gcc/gcc/testsuite/g++.dg/cpp2a/lambda-generic9.C
Patrick Palka cafcfcb584 c++: Fix tsubsting CLASS_PLACEHOLDER_TEMPLATE [PR95434]
Here, during partial instantiation of the generic lambda, we do
tsubst_copy on the CLASS_PLACEHOLDER_TEMPLATE for U{0} which yields a
(level-lowered) TEMPLATE_TEMPLATE_PARM rather than the corresponding
TEMPLATE_DECL.  This later confuses do_class_deduction which expects
that a CLASS_PLACEHOLDER_TEMPLATE is always a TEMPLATE_DECL.

gcc/cp/ChangeLog:

	PR c++/95434
	* pt.c (tsubst) <case TEMPLATE_TYPE_PARM>: If tsubsting
	CLASS_PLACEHOLDER_TEMPLATE yields a TEMPLATE_TEMPLATE_PARM,
	adjust to its TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL.

gcc/testsuite/ChangeLog:

	PR c++/95434
	* g++.dg/cpp2a/lambda-generic9.C: New test.
2021-01-20 09:44:33 -05:00

10 lines
153 B
C

// PR c++/95434
// { dg-do compile { target c++20 } }
template <class>
void f() {
[] <template <class> class U> { U{0}; };
}
template void f<int>();