Fix tests that fail with -std=gnu++98 or -std=gnu++11
authorJonathan Wakely <jwakely@redhat.com>
Thu, 6 Jun 2019 12:13:42 +0000 (13:13 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 6 Jun 2019 12:13:42 +0000 (13:13 +0100)
* testsuite/18_support/set_terminate.cc: Do not run for C++98 mode.
* testsuite/18_support/set_unexpected.cc: Likewise.
* testsuite/20_util/is_nothrow_invocable/value.cc: Test converting to
void.
* testsuite/20_util/is_nothrow_invocable/value_ext.cc: Fix constexpr
function to be valid in C++11.
* testsuite/26_numerics/complex/proj.cc: Do not run for C++98 mode.
* testsuite/experimental/names.cc: Do not run for C++98 mode. Do not
include Library Fundamentals or Networking headers in C++11 mode.
* testsuite/ext/char8_t/atomic-1.cc: Do not run for C++98 mode.

From-SVN: r271999

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/18_support/set_terminate.cc
libstdc++-v3/testsuite/18_support/set_unexpected.cc
libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc
libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value_ext.cc
libstdc++-v3/testsuite/26_numerics/complex/proj.cc
libstdc++-v3/testsuite/experimental/names.cc
libstdc++-v3/testsuite/ext/char8_t/atomic-1.cc

index 18c8306..283c6b9 100644 (file)
@@ -1,5 +1,16 @@
 2019-06-06  Jonathan Wakely  <jwakely@redhat.com>
 
+       * testsuite/18_support/set_terminate.cc: Do not run for C++98 mode.
+       * testsuite/18_support/set_unexpected.cc: Likewise.
+       * testsuite/20_util/is_nothrow_invocable/value.cc: Test converting to
+       void.
+       * testsuite/20_util/is_nothrow_invocable/value_ext.cc: Fix constexpr
+       function to be valid in C++11.
+       * testsuite/26_numerics/complex/proj.cc: Do not run for C++98 mode.
+       * testsuite/experimental/names.cc: Do not run for C++98 mode. Do not
+       include Library Fundamentals or Networking headers in C++11 mode.
+       * testsuite/ext/char8_t/atomic-1.cc: Do not run for C++98 mode.
+
        * include/std/tuple (_TC): Replace with _TupleConstraints.
        (_TupleConstraints): New helper for SFINAE constraints, with more
        expressive member functions to reduce duplication when used.
index 632b9f1..81f182a 100644 (file)
@@ -15,6 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-options "-std=gnu++11" }
 // { dg-do run }
 
 #include <exception>
index dac44e6..7c3f3d4 100644 (file)
@@ -15,7 +15,8 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-do run { target { c++98_only || { c++11_only || c++14_only } } } }
+// { dg-options "-std=gnu++11" }
+// { dg-do run { target { c++11_only || c++14_only } } }
 
 #include <exception>
 #include <testsuite_hooks.h>
index 04d310f..c0c6a7d 100644 (file)
@@ -119,9 +119,11 @@ void test01()
   static_assert( ! is_nt_invocable_r< T,     F  >(), "call throws");
   static_assert( ! is_nt_invocable_r< NT,    F  >(), "call throws");
   static_assert( ! is_nt_invocable_r< Ex,    F  >(), "call throws");
+  static_assert( ! is_nt_invocable_r< void,  F  >(), "call throws");
   static_assert( ! is_nt_invocable_r< T,     CF >(), "conversion throws");
   static_assert(   is_nt_invocable_r< NT,    CF >(), "" );
   static_assert( ! is_nt_invocable_r< Ex,    CF >(), "conversion fails");
+  static_assert(   is_nt_invocable_r< void,  CF >(), "");
 
   static_assert( ! is_nt_invocable< F,   int >(), "call throws");
   static_assert(   is_nt_invocable< F&,  int >(), "");
@@ -140,12 +142,14 @@ void test01()
 
   static_assert(   is_nt_invocable_r< char&,  CF,  int >(), "");
   static_assert(   is_nt_invocable_r< char&,  CF&, int >(), "");
+  static_assert(   is_nt_invocable_r< void,   CF&, int >(), "");
 
   static_assert( ! is_nt_invocable_r< T,      CF&, int >(),
                   "conversion throws");
   static_assert(   is_nt_invocable_r< NT,     CF&, int >(), "");
   static_assert( ! is_nt_invocable_r< Ex,     CF&, int >(),
                   "conversion fails, would use explicit constructor");
+  static_assert(   is_nt_invocable_r< void,   CF&, int >(), "");
 
   static_assert( ! is_nt_invocable< F, int, int >(),
                   "would call private member");
@@ -157,6 +161,7 @@ void test01()
   };
   static_assert( is_nt_invocable< FX >(), "FX::operator() is nothrow" );
   static_assert( is_nt_invocable_r<X, FX >(), "no conversion needed" );
+  static_assert( is_nt_invocable_r<void, FX >(), "" );
 
   struct Y {
     explicit Y(X) noexcept; // not viable for implicit conversions
index 3a133ad..2c00b1f 100644 (file)
@@ -24,19 +24,24 @@ template<typename... T>
   { return std::__is_nothrow_invocable<T...>::value; }
 
 template<typename R, typename... T>
-  constexpr bool is_nt_invocable_conv(std::true_type)
+  struct ConvIsNothrow
   {
     using result_type = typename std::__invoke_result<T...>::type;
+    static void test(std::true_type, R) noexcept;
+    static void test(std::false_type, const result_type&);
+    static constexpr bool value
+      = noexcept(test(std::is_convertible<result_type, R>(),
+                     std::declval<result_type>()));
+  };
 
-    struct ConvIsNothrow
-    {
-      static void test(std::true_type, R) noexcept;
-      static void test(std::false_type, const result_type&);
-    };
+template<typename... T>
+  struct ConvIsNothrow<void, T...> : std::true_type
+  { };
 
-    return std::is_void<R>::value
-      || noexcept(ConvIsNothrow::test(std::is_convertible<result_type, R>(),
-                                     std::declval<result_type>()));
+template<typename R, typename... T>
+  constexpr bool is_nt_invocable_conv(std::true_type)
+  {
+    return ConvIsNothrow<R, T...>::value;
   }
 
 template<typename R, typename... T>
index caf12d2..64e0dec 100644 (file)
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-do run }
+// { dg-do run { target c++11 } }
 
 #include <complex>
 #include <limits>
index 233b348..cfda349 100644 (file)
@@ -15,7 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-do compile }
+// { dg-do compile { target c++11 } }
 
 // Define macros for some common variables names that we must not use for
 // naming variables, parameters etc. in the library.
@@ -25,6 +25,9 @@
 #if __has_include(<experimental/filesystem>)
 # include <experimental/filesystem>
 #endif
+
+#if __cplusplus >= 201402L
+
 // Library Fundamentals
 #include <experimental/algorithm>
 #include <experimental/any>
@@ -66,3 +69,5 @@
 # include <experimental/timer>
 # include <experimental/executor>
 #endif
+
+#endif // C++14
index cecd05d..0841aa3 100644 (file)
@@ -1,6 +1,6 @@
 // Test that char8_t related atomic types and macros are not present when
 // -fchar8_t is not enabled.
-// { dg-do compile }
+// { dg-do compile { target c++11 } }
 // { dg-options "-fno-char8_t" }
 
 #include <atomic>