]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Remove Concepts from -std=c++1z.
authorJason Merrill <jason@redhat.com>
Tue, 8 Mar 2016 22:30:44 +0000 (17:30 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 8 Mar 2016 22:30:44 +0000 (17:30 -0500)
gcc/c-family/
* c-opts.c (set_std_cxx1z): Don't enable concepts.
gcc/testsuite/
* lib/g++-dg.exp (g++-dg-runtest): Handle "concepts" in std list.
* lib/target-supports.exp (check_effective_target_concepts): New.
gcc/cp/
* parser.c (cp_parser_diagnose_invalid_type_name): Give helpful
diagnostic for use of "concept".
(cp_parser_requires_clause_opt): And "requires".
(cp_parser_type_parameter, cp_parser_late_return_type_opt)
(cp_parser_explicit_template_declaration): Adjust.
* Make-lang.in (check-c++-all): Add "concepts" to std list.

From-SVN: r234069

146 files changed:
gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/cp/parser.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/concepts/alias1.C
gcc/testsuite/g++.dg/concepts/alias2.C
gcc/testsuite/g++.dg/concepts/alias3.C
gcc/testsuite/g++.dg/concepts/alias4.C
gcc/testsuite/g++.dg/concepts/auto1.C
gcc/testsuite/g++.dg/concepts/auto3.C
gcc/testsuite/g++.dg/concepts/class.C
gcc/testsuite/g++.dg/concepts/class1.C
gcc/testsuite/g++.dg/concepts/class2.C
gcc/testsuite/g++.dg/concepts/class3.C
gcc/testsuite/g++.dg/concepts/class4.C
gcc/testsuite/g++.dg/concepts/class5.C
gcc/testsuite/g++.dg/concepts/class6.C
gcc/testsuite/g++.dg/concepts/constrained-parm.C
gcc/testsuite/g++.dg/concepts/decl-diagnose.C
gcc/testsuite/g++.dg/concepts/deduction-constraint1.C
gcc/testsuite/g++.dg/concepts/diagnostic1.C
gcc/testsuite/g++.dg/concepts/disjunction1.C
gcc/testsuite/g++.dg/concepts/dr1430.C
gcc/testsuite/g++.dg/concepts/equiv.C
gcc/testsuite/g++.dg/concepts/equiv2.C
gcc/testsuite/g++.dg/concepts/explicit-inst1.C
gcc/testsuite/g++.dg/concepts/explicit-inst2.C
gcc/testsuite/g++.dg/concepts/explicit-inst3.C
gcc/testsuite/g++.dg/concepts/explicit-inst4.C
gcc/testsuite/g++.dg/concepts/explicit-spec1.C
gcc/testsuite/g++.dg/concepts/explicit-spec2.C
gcc/testsuite/g++.dg/concepts/explicit-spec3.C
gcc/testsuite/g++.dg/concepts/explicit-spec4.C
gcc/testsuite/g++.dg/concepts/explicit-spec5.C
gcc/testsuite/g++.dg/concepts/explicit-spec6.C
gcc/testsuite/g++.dg/concepts/expression.C
gcc/testsuite/g++.dg/concepts/expression2.C
gcc/testsuite/g++.dg/concepts/expression3.C
gcc/testsuite/g++.dg/concepts/feature-macro.C
gcc/testsuite/g++.dg/concepts/fn-concept1.C
gcc/testsuite/g++.dg/concepts/fn-concept2.C
gcc/testsuite/g++.dg/concepts/fn1.C
gcc/testsuite/g++.dg/concepts/fn10.C
gcc/testsuite/g++.dg/concepts/fn2.C
gcc/testsuite/g++.dg/concepts/fn3.C
gcc/testsuite/g++.dg/concepts/fn4.C
gcc/testsuite/g++.dg/concepts/fn5.C
gcc/testsuite/g++.dg/concepts/fn6.C
gcc/testsuite/g++.dg/concepts/fn7.C
gcc/testsuite/g++.dg/concepts/fn8.C
gcc/testsuite/g++.dg/concepts/fn9.C
gcc/testsuite/g++.dg/concepts/friend1.C
gcc/testsuite/g++.dg/concepts/friend2.C
gcc/testsuite/g++.dg/concepts/generic-fn-err.C
gcc/testsuite/g++.dg/concepts/generic-fn.C
gcc/testsuite/g++.dg/concepts/iconv1.C
gcc/testsuite/g++.dg/concepts/inherit-ctor1.C
gcc/testsuite/g++.dg/concepts/inherit-ctor2.C
gcc/testsuite/g++.dg/concepts/inherit-ctor3.C
gcc/testsuite/g++.dg/concepts/inherit-ctor4.C
gcc/testsuite/g++.dg/concepts/intro1.C
gcc/testsuite/g++.dg/concepts/intro2.C
gcc/testsuite/g++.dg/concepts/intro3.C
gcc/testsuite/g++.dg/concepts/intro4.C
gcc/testsuite/g++.dg/concepts/intro5.C
gcc/testsuite/g++.dg/concepts/intro6.C
gcc/testsuite/g++.dg/concepts/intro7.C
gcc/testsuite/g++.dg/concepts/member-concept.C
gcc/testsuite/g++.dg/concepts/memfun-err.C
gcc/testsuite/g++.dg/concepts/memfun.C
gcc/testsuite/g++.dg/concepts/partial-concept-id1.C
gcc/testsuite/g++.dg/concepts/partial-concept-id2.C
gcc/testsuite/g++.dg/concepts/partial-spec.C
gcc/testsuite/g++.dg/concepts/partial-spec2.C
gcc/testsuite/g++.dg/concepts/partial-spec3.C
gcc/testsuite/g++.dg/concepts/partial-spec4.C
gcc/testsuite/g++.dg/concepts/partial-spec5.C
gcc/testsuite/g++.dg/concepts/partial-spec6.C
gcc/testsuite/g++.dg/concepts/placeholder1.C
gcc/testsuite/g++.dg/concepts/placeholder2.C
gcc/testsuite/g++.dg/concepts/placeholder3.C
gcc/testsuite/g++.dg/concepts/placeholder4.C
gcc/testsuite/g++.dg/concepts/placeholder5.C
gcc/testsuite/g++.dg/concepts/placeholder6.C
gcc/testsuite/g++.dg/concepts/pr65552.C
gcc/testsuite/g++.dg/concepts/pr65575.C
gcc/testsuite/g++.dg/concepts/pr65634.C
gcc/testsuite/g++.dg/concepts/pr65636.C
gcc/testsuite/g++.dg/concepts/pr65681.C
gcc/testsuite/g++.dg/concepts/pr65848.C
gcc/testsuite/g++.dg/concepts/pr65854.C
gcc/testsuite/g++.dg/concepts/pr66091.C
gcc/testsuite/g++.dg/concepts/pr67249.C
gcc/testsuite/g++.dg/concepts/pr68434.C
gcc/testsuite/g++.dg/concepts/pr68683.C
gcc/testsuite/g++.dg/concepts/req-neg1.C
gcc/testsuite/g++.dg/concepts/req1.C
gcc/testsuite/g++.dg/concepts/req10.C
gcc/testsuite/g++.dg/concepts/req11.C
gcc/testsuite/g++.dg/concepts/req12.C
gcc/testsuite/g++.dg/concepts/req13.C
gcc/testsuite/g++.dg/concepts/req14.C
gcc/testsuite/g++.dg/concepts/req15.C
gcc/testsuite/g++.dg/concepts/req16.C
gcc/testsuite/g++.dg/concepts/req17.C
gcc/testsuite/g++.dg/concepts/req18.C
gcc/testsuite/g++.dg/concepts/req2.C
gcc/testsuite/g++.dg/concepts/req3.C
gcc/testsuite/g++.dg/concepts/req4.C
gcc/testsuite/g++.dg/concepts/req5.C
gcc/testsuite/g++.dg/concepts/req6.C
gcc/testsuite/g++.dg/concepts/req7.C
gcc/testsuite/g++.dg/concepts/req8.C
gcc/testsuite/g++.dg/concepts/req9.C
gcc/testsuite/g++.dg/concepts/template-parm1.C
gcc/testsuite/g++.dg/concepts/template-parm10.C
gcc/testsuite/g++.dg/concepts/template-parm11.C
gcc/testsuite/g++.dg/concepts/template-parm12.C
gcc/testsuite/g++.dg/concepts/template-parm2.C
gcc/testsuite/g++.dg/concepts/template-parm3.C
gcc/testsuite/g++.dg/concepts/template-parm4.C
gcc/testsuite/g++.dg/concepts/template-parm5.C
gcc/testsuite/g++.dg/concepts/template-parm6.C
gcc/testsuite/g++.dg/concepts/template-parm7.C
gcc/testsuite/g++.dg/concepts/template-parm8.C
gcc/testsuite/g++.dg/concepts/template-parm9.C
gcc/testsuite/g++.dg/concepts/template-template-parm1.C
gcc/testsuite/g++.dg/concepts/traits1.C
gcc/testsuite/g++.dg/concepts/traits2.C
gcc/testsuite/g++.dg/concepts/var-concept1.C
gcc/testsuite/g++.dg/concepts/var-concept2.C
gcc/testsuite/g++.dg/concepts/var-concept3.C
gcc/testsuite/g++.dg/concepts/var-concept4.C
gcc/testsuite/g++.dg/concepts/var-concept5.C
gcc/testsuite/g++.dg/concepts/var-concept6.C
gcc/testsuite/g++.dg/concepts/var-templ1.C
gcc/testsuite/g++.dg/concepts/var-templ2.C
gcc/testsuite/g++.dg/concepts/variadic1.C
gcc/testsuite/g++.dg/concepts/variadic2.C
gcc/testsuite/g++.dg/cpp0x/auto3.C
gcc/testsuite/g++.dg/cpp0x/auto9.C
gcc/testsuite/lib/g++-dg.exp
gcc/testsuite/lib/target-supports.exp

index f285c8b62be633de045d067e725ea89033d35831..464297b653919e9de1c9dea81e4a4e8f10961052 100644 (file)
@@ -1,3 +1,7 @@
+2016-03-08  Jason Merrill  <jason@redhat.com>
+
+       * c-opts.c (set_std_cxx1z): Don't enable concepts.
+
 2016-03-04  David Malcolm  <dmalcolm@redhat.com>
 
        PR c/68187
index c2783f7e5603be64a8af2b6e8fcb95b31f3b5516..fec58bcf91f454af36dd048a97d3ad8a87d9a3ec 100644 (file)
@@ -1566,8 +1566,6 @@ set_std_cxx1z (int iso)
   /* C++11 includes the C99 standard library.  */
   flag_isoc94 = 1;
   flag_isoc99 = 1;
-  /* Enable concepts by default. */
-  flag_concepts = 1;
   flag_isoc11 = 1;
   cxx_dialect = cxx1z;
   lang_hooks.name = "GNU C++14"; /* Pretend C++14 till standarization.  */
index 2b95036f931c7817af19a38d5c2c5a3693744bb4..4bb43db6bf1016e385a0735dcd00ade1d465dd04 100644 (file)
@@ -1,5 +1,12 @@
 2016-03-08  Jason Merrill  <jason@redhat.com>
 
+       * parser.c (cp_parser_diagnose_invalid_type_name): Give helpful
+       diagnostic for use of "concept".
+       (cp_parser_requires_clause_opt): And "requires".
+       (cp_parser_type_parameter, cp_parser_late_return_type_opt)
+       (cp_parser_explicit_template_declaration): Adjust.
+       * Make-lang.in (check-c++-all): Add "concepts" to std list.
+
        P0036R0: Unary Folds and Empty Parameter Packs
        * pt.c (expand_empty_fold): Remove special cases for *,+,&,|.
 
index 2286c64a8fb430f57a02eed1c4c61c04e77d4503..8770f6ff1bed4bb016f5ca20b515393ef8defb29 100644 (file)
@@ -152,7 +152,7 @@ check-c++1z:
 
 # Run the testsuite in all standard conformance levels.
 check-c++-all:
-       $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,1z" check-g++
+       $(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) --stds=98,11,14,1z,concepts" check-g++
 
 # Run the testsuite with garbage collection at every opportunity.
 check-g++-strict-gc:
index 535052f97d017c112ed3866eaac151a29bc2b666..726d5fc6a82c8eb73c5424cc1164b399ddbeb3a1 100644 (file)
@@ -3172,6 +3172,8 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree id,
               && !strcmp (IDENTIFIER_POINTER (id), "thread_local"))
        inform (location, "C++11 %<thread_local%> only available with "
                "-std=c++11 or -std=gnu++11");
+      else if (!flag_concepts && id == ridpointers[(int)RID_CONCEPT])
+       inform (location, "%<concept%> only available with -fconcepts");
       else if (processing_template_decl && current_class_type
               && TYPE_BINFO (current_class_type))
        {
@@ -14668,13 +14670,10 @@ cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
        cp_parser_require (parser, CPP_GREATER, RT_GREATER);
 
         // If template requirements are present, parse them.
-       if (flag_concepts)
-          {
-            tree reqs = get_shorthand_constraints (current_template_parms);
-            if (tree r = cp_parser_requires_clause_opt (parser))
-              reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
-            TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
-          }
+       tree reqs = get_shorthand_constraints (current_template_parms);
+       if (tree r = cp_parser_requires_clause_opt (parser))
+         reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
+       TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
 
        /* Look for the `class' or 'typename' keywords.  */
        cp_parser_type_parameter_key (parser);
@@ -19745,6 +19744,8 @@ cp_parser_late_return_type_opt (cp_parser* parser, cp_declarator *declarator,
   /* A late-specified return type is indicated by an initial '->'. */
   if (token->type != CPP_DEREF
       && token->keyword != RID_REQUIRES
+      && !(token->type == CPP_NAME
+          && token->u.value == ridpointers[RID_REQUIRES])
       && !(declare_simd_p || cilk_simd_fn_vector_p || oacc_routine_p))
     return NULL_TREE;
 
@@ -24216,8 +24217,20 @@ cp_parser_requires_clause (cp_parser *parser)
 static tree
 cp_parser_requires_clause_opt (cp_parser *parser)
 {
-  if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_REQUIRES))
-    return NULL_TREE;
+  cp_token *tok = cp_lexer_peek_token (parser->lexer);
+  if (tok->keyword != RID_REQUIRES)
+    {
+      if (!flag_concepts && tok->type == CPP_NAME
+         && tok->u.value == ridpointers[RID_REQUIRES])
+       {
+         error_at (cp_lexer_peek_token (parser->lexer)->location,
+                   "%<requires%> only available with -fconcepts");
+         /* Parse and discard the requires-clause.  */
+         cp_lexer_consume_token (parser->lexer);
+         cp_parser_requires_clause (parser);
+       }
+      return NULL_TREE;
+    }
   cp_lexer_consume_token (parser->lexer);
   return cp_parser_requires_clause (parser);
 }
@@ -25608,13 +25621,10 @@ cp_parser_explicit_template_declaration (cp_parser* parser, bool member_p)
   cp_parser_skip_to_end_of_template_parameter_list (parser);
 
   /* Manage template requirements */
-  if (flag_concepts)
-  {
-    tree reqs = get_shorthand_constraints (current_template_parms);
-    if (tree r = cp_parser_requires_clause_opt (parser))
-      reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
-    TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
-  }
+  tree reqs = get_shorthand_constraints (current_template_parms);
+  if (tree r = cp_parser_requires_clause_opt (parser))
+    reqs = conjoin_constraints (reqs, make_predicate_constraint (r));
+  TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = reqs;
 
   cp_parser_template_declaration_after_parameters (parser, parameter_list,
                                                   member_p);
index 62c70d51e064a5592cf2abdb3f35c03ec7dc33f6..9580c10fc451828951e3cac9fdb60c5b9ba450fb 100644 (file)
@@ -2238,6 +2238,16 @@ return value even without this option.  In all other cases, when
 exhaustion is signalled by throwing @code{std::bad_alloc}.  See also
 @samp{new (nothrow)}.
 
+@item -fconcepts
+@opindex fconcepts
+Enable support for the C++ Extensions for Concepts Technical
+Specification, ISO 19217 (2015), which allows code like
+
+@smallexample
+template <class T> concept bool Addable = requires (T t) @{ t + t; @};
+template <Addable T> T add (T a, T b) @{ return a + b; @}
+@end smallexample
+
 @item -fconstexpr-depth=@var{n}
 @opindex fconstexpr-depth
 Set the maximum nested evaluation depth for C++11 constexpr functions
index 51494140033f89a53229a564dea75d5256fd26a9..40e9b5275caf61ba575d2e7832455930b97ac141 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-08  Jason Merrill  <jason@redhat.com>
+
+       * lib/g++-dg.exp (g++-dg-runtest): Handle "concepts" in std list.
+       * lib/target-supports.exp (check_effective_target_concepts): New.
+
 2016-03-08  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/70135
index 03b3ceae92810677aac0cd72b595bebe5f8d2abe..fdd54bd2af150731559fbc609ca2762d26f91b68 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index d81188ed43547f93eeffb47f7b1a84afaa15e167..7879d441961750785ab2379ec4eec823193d3b28 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index e6ab66976a16d690505dfb6c170e4b9a8684308d..a8f0f67e04f91cb1058746dc3e8a34439389b3b5 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 4227a44c042be903d64d8877abd542e1c88a26b3..8ffa0a10e3f0b1492c27854ed6acb9153dae0f09 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 6068e4cc4862517511a61a79fd524edc1c68d24f..be9237d69fa5cb3e90f2f56c4295e7447644d2c8 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T1, class T2> class A { };
 
index 1cface77d555bea4fb6cc26e82f5363fbe48e276..e1a4d7342aa4157d1a907e5e2d365bf8ec30eaf9 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class...> class tuple {};
 
index ea74a54da6c1b0627310d129ec2383da4ee2a1d2..061105756cb0446e9a5286c41d6125d289629c1c 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class() { return __is_class(T); }
index b213cb58b7e300864b0d84da95e95bdd98b96534..a2c4f5d1aed887501456e1907ea361604712c807 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 2c3ea4483abc0600aabc27d8d82c4de1e070d2ad..4b8706d8001bc8687af983cf0d1902aa210a4350 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index e3a1d2a949b67da8fac572e5f612750a1861fa4d..c25c801f1f63d7755c01896d254f513d3cd9fd01 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 7ba825085523b496a52bba432772f6a4f427d152..af6db2509dbfd310b06ff1d633c209e63f9b36fc 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class() { return __is_class(T); }
index 903bf2499558916fc1114e5e9012690f2b7414f6..218ec9f5a9f094f466900fb7f5316eaff4280835 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool One() { return sizeof(T) >= 4; }
index fe6b42d5557e680a9d7bab941c93347e88d4577d..4a3a3d70a85c0418a0083c7436c0989da9e86e66 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool One() { return sizeof(T) >= 4; }
index fd21c43a037b208f09cefe781ac00a101ca9dc85..2650caeb9c422b1b66482a25dac69f750771fc3e 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 67b56f962d0f7b296b6480a22d43faaf3988b286..9829ba1ba6977bab243e7449112b8f2dcecf539a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 typedef concept int CINT; // { dg-error "'concept' cannot appear in a typedef declaration" }
 
index 6ff3be94ba98b34a5b5fd38d12589377ca0482d7..dfb0c6e9436776b2f867d146c99441612905885a 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67007
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class U>
 concept bool A =
index 7c360cc3943b1d9dc1242ef98e7e4b57d049e614..aa98ffa752a4a1937ee21052ae4e03036fcd28e6 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67159
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept bool R = requires (T& t) {
index f67fa0beacb0c9d8bad844e770de1cdd0b43a279..24472cc296de73a27468f5dd433236db2796de6a 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66962
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <typename> struct remove_cv;
 template <typename> struct is_reference;
index 7f857fe4ecc0048bd48595b3594903c27b724f49..3a7ba0363b1afa0a16afdff6bcb3f80ae7693f35 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66092
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <type_traits>
 
index c2ac7410f010570bfed4324b8550adbad5c12c9e..11e232fe2d5e5a015ec4e645963e05f4e91a5d62 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check equivalence of short- and longhand declarations.
 
index 675fe2105f19cb7c3baf5f6ea98c5e558811201a..24d419b2ed3e948cd2a1edc2ab170ed8a679b608 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 
 // template<typename T>
index 3079ca50f6477d5266dfb52495af581b93e0b4d2..89eeb156b5748229faebd51cb07dd39f47a60887 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 5e75f4ff6313343d2a1f06dd6583322beb33c236..0319756bfc5c48c31c318ab1879eedeccedce59c 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index a471657a750ecb625e1740df305f096a1681002a..177fc6c1368cd8b99b900f0343e3aa4579e4fbd8 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index b075c1009e8ef181d02f2934e96427b0f56d0f2d..cf0d8988bd301cca594d996bec8b0ea7d1714d65 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 6316410b950b399a928fb01654f8010f6f5e94fb..c6f559cd1af7d71df37aa1e90babf7646a266a73 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 4f196243717b2351e7f30cadd9e170e2234fef71..8fa7e8aef16625dcc8c0f21a6e916c2676e00f3c 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 29546b3b37c4e3dd44940e2070d785df3740cf06..6294cef5845ed37d9666fe64ce0b0fceb77db0e6 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index e9aacd51bbbac403a8e0b443458bb0e5c50f57b8..16698cbb366a19a323daf7d5848806b05479e2fc 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 8047278aa77efdedebb1284c9eeb092efde119db..e889c2192bfd90e3bbe17922818943773dbfb926 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 3eba9ff7bfd054a604ee550901b7fe2d8c0412ed..0bf7640df27c0e4ab5e96dc2528efeea6bb91d84 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 struct A {
index 5ae04e43a12eadf69012cfd30dff7f55f16b7dcd..de68ef89ee6f48d8c1ed392a11849b44429d18f4 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 #include <iostream>
index 40c2034764a9c85c6ffeb9043a7e383c24ec460b..ebdadc231f380376e03851470bb804d3f131fd39 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C1()
index eb8406f13b01effa09fa3a11c1eb16f00e0d5de9..77b414e5cfc38c591d4380af6bafa397f4da0cb0 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C()
index 7bc787559ec851153ed4434dd0e2d3ccde5cd2eb..d8ea369814747628b5cf84c395444dcee7ec541f 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #ifndef __cpp_concepts
 #error __cpp_concepts not defined
index 385dcbc13cf175ee0deafafc52f90e6150e343fb..4a8437f010b34a4d1b62a28ee9327fe78dfa1dbb 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Tuple() { // { dg-error "multiple statements" }
index 092c91c5b84c232f7a658c6d4e4e52f0d3672788..86ba936d842b476a9793941278b317f92eaed839 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept auto C1() { return 0; } // { dg-error "deduced return type" }
index b2bdaf9188520a3bf5d3a0dcf7bcd1f32a832f39..c4f9f555e0a9bc2fb1a98d87ccd2bbe914953485 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index f4cd4c5ce346bf7125552fef0557818087c1148b..859c1d5eb21880a40cfb7885276a496845fdcc89 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Test that constraint satisfaction checks work even when
 // processing template declarations.
index 0aee852ce38f8e1a216f4a91e2a8e0a5cb927fdc..51a3fb5fd8e0c9d214c40d719ee21b878bf4985f 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 06402e02c3bbab6d9b22144415d1b30f943a9a6d..ef704f7e135dcaad7fabcaf581d477654d8b6638 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 5ced6a7f390d065b11f838081a67898848af5ee3..9fa5790fd5e95efc6d28deacefae6f8b060094ff 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index b3c3f70a878952deff11f46b1285bea05be6b573..dd9a19e9f195350503e3a24127eac0cf02c90ec5 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check shorthand notation.
 
index 73ef19a20a7743ed77c13db85260f0a93cc011c0..f6f165e099952478698f20f9d20fcd531d032830 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Redefinition errors.
 
index 2abd34a1e78039ad77cbdc55aba2f81b9a34a5f7..dd16a9ae65b58002bf68625d19365e3d13b8b19e 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do link }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // FIXME: What is this actually testing?
 
index 71141f6ff5572c063a4f5d81d5c4f2dd0f0ab9ca..e7481be2f05ca1a8d84327770fde574212cf78f2 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class() { return __is_class(T); }
index b7ac4e10a8dad748b2bc45a770c9085bc4e7280a..c135bd7010a6ca13a4153dc5d17ea1fd140b5a09 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 286e7697c73938f13bd6edac3e6629d988b54265..5c418cbf76cfb054c3e97d79f9c336cc7ff757fe 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Eq() { return requires(T t) { t == t; }; }
index 38b230c4ff7ae336952f93d6370735d3336d821a..6268801a260c6f5a4e16eeb59062b578e8c14d5a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Eq() { return requires(T t) { t == t; }; }
index 1e975108257b5c3c75c234ac5c322a0fe4fb49b6..03a47d5c959783a4fa48e3cb93054b1eced1d235 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 778356db1803a47384a129bffe38c6c1f8c788c1..d74ea21b6eff82f763db58c0428cf7c273ec6347 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 #include <type_traits>
index c4dd38fe5b45615f40f6ee21a576ba5e39e0d682..28f3566d4178809a46d20f61380df1fa48aa8735 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67240
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 int foo(int x)
 {
index 29433ade7b4feb52cded3d8862ff324750ed7ef2..6f5115c6c85fdf8eed5ad83c9fec056dc64a20bd 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 4f39203db4c34e36dbd859b0a5c82e1c71a9878b..435745a1fa9e0db7448d6bfa6887056648d66975 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 3d0ddf210d12681a05101a0225ae9b7178e0d6f6..07499bb40f9dc301b370de44946a060e867b38ae 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index cd9565f660f022e4b2bde85a7787758538c9beee..4c53205466ddf8a428de0282ce054e86039b82e5 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 1b5f5d14b7e56b4ca663dd3de0527598d149fb27..5f036c4b6454b0f3a8f32c3ae41f1050684098b2 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C = __is_class(T);
index 91a1cacf9c0eacd47f4e674a9c37db4876df1190..1db1d7a493fbfdb4df4cd0099a8cba3a9d1c412c 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 5dd95c698e12e422210d8df14c2080a3848b5b68..3cb3ecbb8b4b011556bfd60bb29f87ce72f04483 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename ... T>
   concept bool C1 = true;
index 6d8aec3ff61649fe13948c6c63ef1ca990d82021..182129165556bc5ab007f0df2ff8385011c156c6 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename ... T>
   concept bool C1 = true;
index 64771cd6e251f8279083a1846987e2a6ed04b8a6..31924f930a7029ab198f8ad8c8fc1d723eb16f0e 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T, typename U = int>
   concept bool C()
index 4e168ef3c7dc837b5609835dd72c9149691a4efc..f8ed6669f14f0fb091854b56ba93a4352678bd97 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67003
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 namespace X {
   template<class>
index d92eafcfbd57c70a3cb47181e92a179fadd245a4..914c5fd611006d5ab68f9f14db5d58ffa5a98d14 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66985
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <template <class> class T>
 concept bool _Valid = requires { typename T<int>; };
index 46404e3ad4f0fd1441e856fa7d0b701c70be3744..2b0604648313b98911e8b8381291d26ab92c1ace 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct Base {
   template<typename T>
index a62fe5ef22030b4694de7f4e7ef431066fbc9273..e44273ca8c872a475760358364565825bd5f53fd 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run}
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 
 template<typename T>
index a96c01816534591eb956fc90a1b6ee8a9437c9f3..523410cab984c8e8950f610c5acac859b2798277 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run}
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <cassert>
 
index 114c12f85bc576b314339405d0c4fdee630873c9..117400cf1b21486925a1e93cb92146bdb6345668 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Type() { return true; }
index fb754483db444db3101f4ad0700da4a02898daf1..2e6866ecb9f1f58366aa675799d42af80194f8c5 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Make sure that we check partial concept ids
 // with variable concepts.
index fe612d4ada0eaa5d9da475c96952a143f54ef9ba..5db9a585090dc066fd7c1f9dc25206c8dc6eeddb 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check that constraints don't break unconstrained partial
 // specializations.
index db7545586a9ae32fd745fd2200b66aa7f873ce0a..bc7621bec4d42676ddb44c23978c9c1a5c533993 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67084
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 constexpr bool p = false;
index d73d7879a30457657493dac531508ce6d114a147..9387ce00a1b7ee3a9c6df4002e3d143fa1cb18f6 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T> struct A { };
 template <class T> requires false struct A<T*> { };
index d4b8e9c92f782f568490d850fe956b99d175d63c..80e41ab8399013370e218b4e4255fe31b9997118 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T> concept bool is_int = __is_same_as(T,int);
 
index dcf167bc4ae38d45e05a94b6653f76d2a87aef51..32a5eae693c1534045730e361a40011d25fd61c1 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67138
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept bool _Auto = true;
index 2196fcdf3aa63c542dc5814d164c2a90ac883d78..50ef28991030f5fb32ea871e28d097fa6eaafd60 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67152
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept bool HasType = requires { typename T::type; };
index 0b5a7cf278598d224bca07917b3581488b00eb16..757bcef9b1ce9fe66f5f7887176b705da2111099 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T, typename U>
 struct is_same
index 8165c8134f9d1c06f3ce15aa3ed6dda64cbf89ea..cf2013e63a6b29c3145e40d530755bb2db4d7113 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check argument deduction constraints.
 // TODO: We shoul have more of these...
index bd89551aa5bc6a5dd2744e888a6632927fe210bc..208fc29a0d3f9bf4aae46d23f0af98b759a9567a 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U>
 concept bool Same = __is_same_as(T, U);
index e34fc94e6cf61074e24938451cc52150bdbf5d47..2fb47580cdba857c6465eb0d138ff8259d2ab125 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U>
 concept bool Same = __is_same_as(T, U);
index 6aaf57b32879ecf6926ded3166d7955e98120173..e1d3092a77db31ec5fada751f735d7ecc7f4a709 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U>
 concept bool Same = __is_same_as(T, U);
index 7f2e67a9192b8d082a2f850048833a6505d33253..ee218fdf9042b9003ae21e0282f0e50a5a7aad67 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <int I> struct B { static const int i = I; };
 template <int I> concept bool Few = I < 10;
index c72e6c638f57e15dc33be62b3dc7459cb519294f..c1cc0b165b0d769c2b955fdb6b1d6f865c69abb6 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool Concept() {
index fa24b7be0e07bb3b26c988045d8d9640d43ba9c5..18e805959de5b02cd7d1749d26aca53a4b15526c 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C = false;
index 31dc87aa6c3ca843ecd92706fb6a28ae73ae8bbf..df64a3f386a504c30054bcd0b00febf38ee9b0f6 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C1() {
index 8b6f2a1ad6eba7fe0e0e37a49d85911df0d2c3bc..ddeef8203146361d36b149909302054df420f27f 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 using TD = int;
 
index bdbbd66e74746d228499e3c76edb01c3272e6284..fcbbab376ac6f1520d9633fd6b7c35e2923fbf10 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C()
index d0bb6a2afb85d66b8d933f717f4d8402ea88bbd0..4affa2366d2f0e029c643d59a3a6e6ddedaacdc5 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Performance test... This should be fast.
 
index 4b0befa5599738cab72442d716880f627b48b769..c615ed7b4da4364276152ac22d4683d6427f2a02 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Handle alias templates in type requirements.
 
index ee9d1150fdbf70636146741d64a04dd1c83e1865..b53f64c7bd3a4299532596348f49998e2311093f 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C1()
index cb0445d2a360211d4d2f8f2b4bf538a4f2e609fa..9cfada59b3eecb461a57b9ae4d50bf85ae019d60 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<class T> concept bool C1 = true;
 template<class A, class B> struct Pair {};
index d5f901ac3c646ad47ea5006c5f4a7c0837278f91..ece5bb7c0019b3f60b7e56807662fdd40f5236ed 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class>
 concept bool C1 () {
index a0d8fcf46b01768693f8f1285c001b1d9587c29f..eef1b33c96a6b771a259c453889a7dc70ece1120 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <typename, typename>
 struct is_same {
index 0b7520e185c48c571a95e3253f0126e6dfad393c..6c80d81a3026f422f8ec60de8087e90aa0282748 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 void f1(int a) requires true;         // OK
 auto f2(int a) -> bool requires true; // OK
index 02d5de09ec9a206c5f731b82303514db2df20080..0636f1dfdb8263eb4e06d662707ba483f450ea2d 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class () { return __is_class(T); }
index bd3b4e3e2f5f85da5c7b16cfb2c882d5af424676..0352a08113b1288566fef46b5d3b08738fbae49c 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Test that standard conversions are checked with
 // implicit conversion constraints.
index 3e21c11113fdb5729627850351728a5f775eb863..1a259e82990eba2083f9244b403a088e36d8d559 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check that we can evaluate constant requires-expressions
 // as constant expressions, for the curious case when they
index 7b23d113cb29059c8042fa1d0bfd13793397e463..f28551443c36603e072badd6a8883f10e807e62a 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66218
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <type_traits>
 
index 54fcd8b0678cbc75cd2e9dc4f698d30cb4f1feea..559c12874093be1b2c10f8a254f8b674e06dda9b 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66758
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class...Args>
 concept bool Constructible =
index e86281a39313cd52d07dc3cb54847597e749d8b2..de7efcd2c738d926af8d91cd1e801600fd0d99cb 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66758
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U>
 concept bool C = requires (T t, U u) { t + u; };
index 09ebf89ef1be31e828a8f07f3bccd701a853430d..537669bbcb43badbb6f58838e85b05e6b87d4b06 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66832
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class U, unsigned N>
   requires requires (T& t, U &u) { t.foo(); u.foo(); }
index 67ae5b5126cccc4148538422f197423dafc809e4..2704c38bacb47fda6e4f480f9d61e842de4ab8a6 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66988
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <type_traits>
 
index 48bd0a8c2cd6122271df64326b8737e50ef13406..af622e2fb6d4ab3baa5117727927f940daf499cb 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67018
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <typename T>
 constexpr bool Val = true;
index 9a474376137edcd15c46248134885e55909b9a3d..0b6848b42f25eb03d044af8206253bfe2570b0a4 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class> struct all_same {
   static constexpr bool value = 1;
index a28f30b5b18d0a618e3ec1a8018860c392f811c4..b1258c4508b550b28c4a677e5ceef12200976727 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class () { return __is_class(T); }
index 69581ee43eac2ed358393e1e3521576a8e458cd2..5bc7ac790a34d406289e1845897399e1964a8fe0 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Class () { return __is_class(T); }
index 20778342e52bf05e2f3e9096ff2d432944b756a1..e7e71a47bd29c910585c6c9f068efbd9aafb066e 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct fool {
   constexpr fool operator&&(fool) const { return {}; }
index c0af1f8849546efd0d3ddf268d051368bda7069e..17db0dd6abcfcb8a220ff3c5aee862418a2565d5 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct fool { };
 
index e4f20ecb67ca225dc5bc13aedd066c4897533490..e8e94c02ff26a31ffdff2dffc0c6820415fa58b8 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 struct X { };
 int operator==(X, X) { return 0; }
index 51aba7b2e6f584a17593298ea8941b461251c3f2..ef25987a4f8a31d96e01dd09ceee9f90e4f75390 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <vector>
 
index 35c08541b60c725eed88a9c9d7aa09b56e0a3d63..4adbc78978c0980ca15ccc50c5bee1c0c21cfeee 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 // Check that type requirements are normalized correctly.
 
index 5654be0a0fe4634d53bdf5a8182502b997fd9aba..5f66376fd0b31f0c7611ca40f158ea77abb8da95 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 struct S1 {};
index 20a7fb6b1c354e71b2e79eea3ac7770570a422db..101432feefbadd12f043fabe1b6823a269b825f8 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
index b80328995b0d738b9013641e7e98ff6429d350e1..b61912c84bcd0fbe35b318ed5b19136c7888d530 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<int N, class T>
   concept bool P() { return true; }
index 95ce78451167db2a264aa8cd3baff236f5f1020a..1f0d91ad778b381ee6cd57810f0692f4223af4b1 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool NameProvider()
index 1639f26dbf103588f81d5c1f8f7ffbe8ab20dff0..edeeb909fcb27a680a07a12ade8fcb79e0dccdce 100644 (file)
@@ -1,5 +1,5 @@
 // Conceptized version of template/ttp23.C
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T> concept bool Foo = true;
 
index ad715e11a32411e116c69469eb23c9c96d0387b5..146d1c6def15752c48e4fee3bd6a8a089ec1d8f7 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
index e412fb4ca1258b65616f3c7c93ad0fd31922a0c9..5fcd5a29a342ac5d08aade1f9c53aa7622e46130 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
index a29bb11a6799c62f01ea020eb9e6a4aeaea10c0e..ac9d2af7cb8bf7f8863bb7ffc948b9eece22f312 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
index f33742becd25151ecb74e94de0c693a73042d451..25bd916ca017a916fe0858692afcfe0d0cadc067 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_same_as(T, int);
index d23f2594b4650b7b28dc374b5547b7a47f58b323..e70cdc0b2b0a080b55255d9312a3faba2c55800f 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename... Ts> struct are_same;
 
index 10869840fdde3946a7a0263a8a29b1f2ce5f3736..3e2a2f23377c24f9f1b514deca878f3e45f8e598 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename... Ts> struct are_same;
 
index f604d5a6a2b0cddbd2864c5748e10c1d9b1fb37e..69a31bcb8e6a1170af6443806cae05bc81a4b2bd 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 7e6898405ae5263d10bdd71be2103e6b7d20fa39..06b0f96e094eb6674b8aee610a2d2e3480fc6b4a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C() { return __is_class(T); }
index 40912843714b266aa1ec02254b1b4e6965a090ef..c2dcc3a8c1b49189e21be6690747327552b9e578 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66937
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 #include <tuple>
 
index f07c878747295e0b769a6dcf10fd29a4e9d5ed09..7ccf087aaed89355259d828455212cad9eb3ae7a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
index 28ced34c63e39684ee053fcd7d3a695c88b37e5f..971a67bf64f93b0ac864ea1203c20acf308a4d50 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool Nothrow_assignable() { return __has_nothrow_assign(T); }
index eb8a2b797a3941c215cd0a1a86a0a50d59213333..b99016f9a8bf0ab7c6a45370d18076094765e7e1 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
 concept bool C1 = __is_class(T);
index 71663bdec5fb5ab7e1da005f36f6139095dac7f4..21c69dd4a430db958e47008d2c08cabf798f1e6b 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_class(T);
index c90102848d4edea611638a79b4382b290198c99a..d27e4fa24b7248e5df0afb98f4ad34eec5000b42 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T>
   concept bool C1 = __is_class(T);
index b39835396165bf8dd0d181711206f92c302cb4e9..1870a42dcb0e3becca2745273467f078c84c977a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T, typename U>
 concept bool Same = __is_same_as(T, U);
index 13f86dd31247d20b970080dc1a7dd8c3a7d436c0..ca163321e7620e15962eb70b5155bac872ccf87f 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template<typename T1, typename T2>
 concept bool C1 = true;
index 2f775fd62e0f5dcbbcdc811b2cb1c18df65f3d3e..40be4f9d02f669b6181dd4f257022091f88caa5a 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 concept int C = true;          // { dg-error "bool" }
index 79476c354166c87bed0ebeef02f6299da7443076..7dfa2400d3cf8a4f7b510ab134b6c55d4b9f4d28 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67117
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
   requires false
index e615f21457dd233bec4c0ce420cdbed929464c28..dc0be75cae73782843a660f31ca76139fcedec65 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/67139
-// { dg-options -std=c++1z }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T>
 constexpr typename T::type::value_type _v = T::type::value;
index ed3d4f1e01d7baa8a7be95df7bc5ec7e748bf4df..8129463ae785b739a19dff51e1cb49529042e521 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/66712
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T, class...Args>
 concept bool _Constructible_ =
index 6c552771d59c646cc4fce56f363abc9bcc1c5bd3..f7aa7108480fd663ebd889e9b3c4dc7d3c93b81c 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++1z" }
+// { dg-options "-std=c++1z -fconcepts" }
 
 template <class T> concept bool Copyable = requires (T t) { T(t); };
 template <class T> concept bool Constructable = requires { T(); };
index 27aab5738c829573010cef88e3cfb0f3ab3c0eeb..ed7084b771e39a34eea823fd2b308a9c6777b275 100644 (file)
@@ -17,11 +17,11 @@ struct A { };
 
 A<int> A1;
 // CWG issue 625
-A<auto> A2 = A1;               // { dg-error "" "" { target { ! c++1z } } }
+A<auto> A2 = A1;               // { dg-error "" "" { target { ! concepts } } }
 
 auto foo() { }                 // { dg-error "auto" "" { target { ! c++14 } } }
 
-void bar(auto i)               // { dg-error "incomplete|auto" "" { target { ! c++1z } } }
+void bar(auto i)               // { dg-error "incomplete|auto" "" { target { ! concepts } } }
 {
   (void)i;
 }
index ee204410368a16b150adf83733968d345e58501e..9001f78fa45ee93c05cb9b4158f991129dfd859c 100644 (file)
@@ -116,8 +116,8 @@ template <auto V = 4> struct G {};          // { dg-error "auto" }
 template <typename T> struct H { H (); ~H (); };
 H<auto> h;                                     // { dg-error "invalid|initializer" }
 
-void qq (auto);                       // { dg-error "auto" "" { target { ! c++1z } } }
-void qr (auto*);              // { dg-error "auto" "" { target { ! c++1z } } }
+void qq (auto);                       // { dg-error "auto" "" { target { ! concepts } } }
+void qr (auto*);              // { dg-error "auto" "" { target { ! concepts } } }
 
 // PR c++/46145
 typedef auto autot;            // { dg-error "auto" }
index 1343533584fcac72af02803420e71587e71cf39f..4f7d18a18c06c762d71292b00d4dab556147a981 100644 (file)
@@ -56,6 +56,8 @@ proc g++-dg-runtest { testcases flags default-extra-flags } {
            }
            set option_list { }
            foreach x $std_list {
+               # Handle "concepts" as C++1z plus Concepts TS.
+               if { $x eq "concepts" } then { set x "1z -fconcepts" }
                lappend option_list "${std_prefix}$x"
            }
        } else {
index 16d358882d592e67cafd045b8e74179bb301ac1a..5af139b55ab90a546fddb2ef240b65d0fa87e1e0 100644 (file)
@@ -6557,6 +6557,11 @@ proc check_effective_target_c++1z { } {
     return [check_effective_target_c++1z_only]
 }
 
+# Check for C++ Concepts TS support, i.e. -fconcepts flag.
+proc check_effective_target_concepts { } {
+    return [check-flags { "" { } { -fconcepts } }]
+}
+
 # Return 1 if expensive testcases should be run.
 
 proc check_effective_target_run_expensive_tests { } {