aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2021-02-04 11:46:45 -0500
committerJason Merrill <jason@redhat.com>2021-02-04 15:43:43 -0500
commit4e7c24d97dd65083a770252ce942f43d408fe11d (patch)
tree6eec6b1df9b734a631d690668b737f2452f6949d
parent65c1cb358999e9d1618834af341b31837ede839e (diff)
downloadgcc-4e7c24d97dd65083a770252ce942f43d408fe11d.zip
gcc-4e7c24d97dd65083a770252ce942f43d408fe11d.tar.gz
gcc-4e7c24d97dd65083a770252ce942f43d408fe11d.tar.bz2
c++: Empty args for variadic concept [PR98717]
Nice when fixing a bug is as easy as removing incorrect checks. gcc/cp/ChangeLog: PR c++/98717 * constraint.cc (build_concept_check_arguments): Remove assert. (build_concept_check): Allow empty args. gcc/testsuite/ChangeLog: PR c++/98717 * g++.dg/cpp2a/concepts-variadic3.C: New test.
-rw-r--r--gcc/cp/constraint.cc8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-variadic3.C7
2 files changed, 7 insertions, 8 deletions
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc
index 9049d08..31e0fb5 100644
--- a/gcc/cp/constraint.cc
+++ b/gcc/cp/constraint.cc
@@ -1345,7 +1345,6 @@ build_concept_check_arguments (tree arg, tree rest)
}
else
{
- gcc_assert (rest != NULL_TREE);
args = rest;
}
return args;
@@ -1444,13 +1443,6 @@ build_concept_check (tree target, tree args, tsubst_flags_t complain)
tree
build_concept_check (tree decl, tree arg, tree rest, tsubst_flags_t complain)
{
- if (arg == NULL_TREE && rest == NULL_TREE)
- {
- tree id = build_nt (TEMPLATE_ID_EXPR, decl, rest);
- error ("invalid use concept %qE", id);
- return error_mark_node;
- }
-
tree args = build_concept_check_arguments (arg, rest);
if (standard_concept_p (decl))
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-variadic3.C b/gcc/testsuite/g++.dg/cpp2a/concepts-variadic3.C
new file mode 100644
index 0000000..6fa7113
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-variadic3.C
@@ -0,0 +1,7 @@
+// PR c++/98717
+// { dg-do compile { target c++20 } }
+
+template<typename... T>
+concept True = true;
+
+static_assert(True<>);