diff options
author | Jason Merrill <jason@redhat.com> | 2019-03-14 15:53:04 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-03-14 15:53:04 -0400 |
commit | f869f40780836d1744ec973e6d0e9d948947d509 (patch) | |
tree | d60dee036a06260918e1b3fcefee76796f243d86 /gcc | |
parent | aa9cedb4edf6b09b1b4f15ba837e387d72c347e8 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/parser.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/concepts/no-bool1.C | 4 |
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; |