mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 23:25:24 +02:00
c++: non-dep decltype folding of concept-id C<Ts...> [PR123676]
Here since the expression within the decltype C<Ts...> is not instantiation dependent (we know its type is bool, and don't care about its value) finish_decltype_type instantiates it immediately via the usual tsubst_expr with NULL_TREE args. During which however tsubst_pack_expansion isn't prepared to handle such a substitution due to an overly strict assert. This patch relaxes the assert accordingly. PR c++/123676 gcc/cp/ChangeLog: * pt.cc (tsubst_pack_expansion): Relax unsubsituted_packs assert to allow !processing_template_decl when args is NULL_TREE. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-decltype5.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
This commit is contained in:
@@ -14146,7 +14146,8 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
|
||||
/* We can't substitute for this parameter pack. We use a flag as
|
||||
well as the missing_level counter because function parameter
|
||||
packs don't have a level. */
|
||||
gcc_assert (processing_template_decl || is_auto (parm_pack));
|
||||
gcc_assert (processing_template_decl || is_auto (parm_pack)
|
||||
|| args == NULL_TREE);
|
||||
unsubstituted_packs = true;
|
||||
}
|
||||
}
|
||||
|
||||
10
gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C
Normal file
10
gcc/testsuite/g++.dg/cpp2a/concepts-decltype5.C
Normal file
@@ -0,0 +1,10 @@
|
||||
// PR c++/123676
|
||||
// { dg-do compile { target c++20 } }
|
||||
|
||||
template<class...>
|
||||
concept C = true;
|
||||
|
||||
template<class... Ts>
|
||||
auto f() -> decltype(C<Ts...>) {
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user