c++: alias CTAD in unevaluated context [PR101233]
This is the alias CTAD version of the CTAD bug PR93248, and the fix is the same: clear cp_unevaluated_operand so that the entire chain of DECL_ARGUMENTS gets substituted. PR c++/101233 gcc/cp/ChangeLog: * pt.c (alias_ctad_tweaks): Clear cp_unevaluated_operand for substituting DECL_ARGUMENTS. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/class-deduction-alias10.C: New test.
This commit is contained in:
parent
d04b0c7579
commit
a8b3861496
2 changed files with 17 additions and 1 deletions
|
@ -29097,7 +29097,13 @@ alias_ctad_tweaks (tree tmpl, tree uguides)
|
|||
/* Substitute the deduced arguments plus the rewritten template
|
||||
parameters into f to get g. This covers the type, copyness,
|
||||
guideness, and explicit-specifier. */
|
||||
tree g = tsubst_decl (DECL_TEMPLATE_RESULT (f), targs, complain);
|
||||
tree g;
|
||||
{
|
||||
/* Parms are to have DECL_CHAIN tsubsted, which would be skipped
|
||||
if cp_unevaluated_operand. */
|
||||
cp_evaluated ev;
|
||||
g = tsubst_decl (DECL_TEMPLATE_RESULT (f), targs, complain);
|
||||
}
|
||||
if (g == error_mark_node)
|
||||
continue;
|
||||
DECL_USE_TEMPLATE (g) = 0;
|
||||
|
|
10
gcc/testsuite/g++.dg/cpp2a/class-deduction-alias10.C
Normal file
10
gcc/testsuite/g++.dg/cpp2a/class-deduction-alias10.C
Normal file
|
@ -0,0 +1,10 @@
|
|||
// PR c++/101233
|
||||
// { dg-do compile { target c++20 } }
|
||||
|
||||
template<class T, class U>
|
||||
struct A { A(T, U); };
|
||||
|
||||
template<class T, class U>
|
||||
using B = A<U, T>;
|
||||
|
||||
using type = decltype(B{0, 0});
|
Loading…
Add table
Reference in a new issue