Hi!

So, from what I can understand, __cpp_guaranteed_copy_elision
is a C++17 P0135R1 feature test macro for a feature we claim to support,
and __cpp_nontype_template_parameter_auto is a new name for the
__cpp_template_auto macro (which doesn't appear anymore in the SD-6 lists,
but clang++ keeps it for backwards compatibility too).

Tested on x86_64-linux, ok for trunk?

2019-01-12  Jakub Jelinek  <ja...@redhat.com>

        * c-cppbuiltin.c (c_cpp_builtin): Define __cpp_guaranteed_copy_elision
        and __cpp_nontype_template_parameter_auto.  Add a comment that
        __cpp_template_auto is deprecated.

        * g++.dg/cpp1z/feat-cxx1z.C: Add tests for
        __cpp_guaranteed_copy_elision and __cpp_nontype_template_parameter_auto
        feature test macros.
        * g++.dg/cpp2a/feat-cxx2a.C: Likewise.

--- gcc/c-family/c-cppbuiltin.c.jj      2019-01-01 12:37:51.340414101 +0100
+++ gcc/c-family/c-cppbuiltin.c 2019-01-12 14:20:12.792148907 +0100
@@ -971,9 +971,13 @@ c_cpp_builtins (cpp_reader *pfile)
          cpp_define (pfile, "__cpp_aggregate_bases=201603");
          cpp_define (pfile, "__cpp_deduction_guides=201703");
          cpp_define (pfile, "__cpp_noexcept_function_type=201510");
+         /* Old macro, superseded by
+            __cpp_nontype_template_parameter_auto.  */
          cpp_define (pfile, "__cpp_template_auto=201606");
          cpp_define (pfile, "__cpp_structured_bindings=201606");
          cpp_define (pfile, "__cpp_variadic_using=201611");
+         cpp_define (pfile, "__cpp_guaranteed_copy_elision=201606");
+         cpp_define (pfile, "__cpp_nontype_template_parameter_auto=201606");
        }
       if (cxx_dialect > cxx17)
        {
--- gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C.jj  2018-10-22 09:28:06.387657035 
+0200
+++ gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C     2019-01-12 14:27:15.014332003 
+0100
@@ -417,6 +417,18 @@
 #  error "__cpp_variadic_using != 201611"
 #endif
 
+#ifndef __cpp_guaranteed_copy_elision
+#  error "__cpp_guaranteed_copy_elision"
+#elif __cpp_guaranteed_copy_elision != 201606
+#  error "__cpp_guaranteed_copy_elision != 201606"
+#endif
+
+#ifndef __cpp_nontype_template_parameter_auto
+#  error "__cpp_nontype_template_parameter_auto"
+#elif __cpp_nontype_template_parameter_auto != 201606
+#  error "__cpp_nontype_template_parameter_auto != 201606"
+#endif
+
 #ifdef __has_cpp_attribute
 
 #  if ! __has_cpp_attribute(maybe_unused)
--- gcc/testsuite/g++.dg/cpp2a/feat-cxx2a.C.jj  2018-11-17 00:16:41.302392263 
+0100
+++ gcc/testsuite/g++.dg/cpp2a/feat-cxx2a.C     2019-01-12 14:29:03.283584283 
+0100
@@ -416,6 +416,18 @@
 #  error "__cpp_variadic_using != 201611"
 #endif
 
+#ifndef __cpp_guaranteed_copy_elision
+#  error "__cpp_guaranteed_copy_elision"
+#elif __cpp_guaranteed_copy_elision != 201606
+#  error "__cpp_guaranteed_copy_elision != 201606"
+#endif
+
+#ifndef __cpp_nontype_template_parameter_auto
+#  error "__cpp_nontype_template_parameter_auto"
+#elif __cpp_nontype_template_parameter_auto != 201606
+#  error "__cpp_nontype_template_parameter_auto != 201606"
+#endif
+
 // C++20 features
 
 #if __cpp_conditional_explicit != 201806

        Jakub

Reply via email to