aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2019-03-14 15:53:04 -0400
committerJason Merrill <jason@gcc.gnu.org>2019-03-14 15:53:04 -0400
commitf869f40780836d1744ec973e6d0e9d948947d509 (patch)
treed60dee036a06260918e1b3fcefee76796f243d86
parentaa9cedb4edf6b09b1b4f15ba837e387d72c347e8 (diff)
downloadgcc-f869f40780836d1744ec973e6d0e9d948947d509.zip
gcc-f869f40780836d1744ec973e6d0e9d948947d509.tar.gz
gcc-f869f40780836d1744ec973e6d0e9d948947d509.tar.bz2
Don't require 'bool' in a concept definition.
* parser.c (cp_parser_decl_specifier_seq): Support C++20 concept-definition syntax without 'bool'. From-SVN: r269692
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c9
-rw-r--r--gcc/testsuite/g++.dg/concepts/no-bool1.C4
3 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 054a891..6c96c24 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2019-03-14 Jason Merrill <jason@redhat.com>
+
+ * parser.c (cp_parser_decl_specifier_seq): Support C++20
+ concept-definition syntax without 'bool'.
+
2019-03-14 Jakub Jelinek <jakub@redhat.com>
PR c++/89512
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 14da1a1..b8a0245 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -13964,6 +13964,15 @@ cp_parser_decl_specifier_seq (cp_parser* parser,
case RID_CONCEPT:
ds = ds_concept;
cp_lexer_consume_token (parser->lexer);
+ /* In C++20 a concept definition is just 'concept name = expr;'
+ Support that syntax by pretending we've seen 'bool'. */
+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
+ && cp_lexer_nth_token_is (parser->lexer, 2, CPP_EQ))
+ {
+ cp_parser_set_decl_spec_type (decl_specs, boolean_type_node,
+ token, /*type_definition*/false);
+ decl_specs->any_type_specifiers_p = true;
+ }
break;
/* function-specifier:
diff --git a/gcc/testsuite/g++.dg/concepts/no-bool1.C b/gcc/testsuite/g++.dg/concepts/no-bool1.C
new file mode 100644
index 0000000..be9b73a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/no-bool1.C
@@ -0,0 +1,4 @@
+// { dg-do compile { target c++14 } }
+// { dg-additional-options -fconcepts }
+
+template <class T> concept True = true;