[committed] libstdc++: Adjust tests that give different results in C++20

Message ID 20200731165205.GA1287175@redhat.com
State New
Headers show
Series
  • [committed] libstdc++: Adjust tests that give different results in C++20
Related show

Commit Message

Ian Lance Taylor via Gcc-patches July 31, 2020, 4:52 p.m.
libstdc++-v3/ChangeLog:

	* testsuite/20_util/is_aggregate/value.cc: Adjust for changes to
	definition of aggregates in C++20.
	* testsuite/20_util/optional/requirements.cc: Adjust for
	defaulted comparisons in C++20.

Tested x86_64-linux, committed to trunk.
commit 8e2592a88821511aa45c3325246f3b08a88fa063
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Fri Jul 31 17:51:00 2020

    libstdc++: Adjust tests that give different results in C++20
    
    libstdc++-v3/ChangeLog:
    
            * testsuite/20_util/is_aggregate/value.cc: Adjust for changes to
            definition of aggregates in C++20.
            * testsuite/20_util/optional/requirements.cc: Adjust for
            defaulted comparisons in C++20.

Patch

diff --git a/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc b/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc
index bef9dc4ca07..085eb557419 100644
--- a/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc
+++ b/libstdc++-v3/testsuite/20_util/is_aggregate/value.cc
@@ -45,8 +45,6 @@  void test01()
 		UnionType>(true), "");
   static_assert(test_category<is_aggregate,
 		SLType>(true), "");
-  static_assert(test_category<is_aggregate,
-		NoexceptMoveAssignClass>(true), "");
   static_assert(test_category<is_aggregate,
 		unsigned[3]>(true), "");
   static_assert(test_category<is_aggregate,
@@ -63,8 +61,13 @@  void test01()
 		EnumType[]>(true), "");
   static_assert(test_category<is_aggregate,
 		EnumType[][2]>(true), "");
-  pos<ClassType, UnionType, SLType, NoexceptMoveAssignClass,
+  pos<ClassType, UnionType, SLType,
       unsigned[3], unsigned[3][2], unsigned[], unsigned[][3]>();
+#if __cplusplus == 201703L
+  static_assert(test_category<is_aggregate,
+		NoexceptMoveAssignClass>(true), "");
+  pos<NoexceptMoveAssignClass>();
+#endif
 
   // Negative tests.
   static_assert(test_category<is_aggregate,
@@ -93,4 +96,10 @@  void test01()
 		void>(false), "");
   neg<AbstractClass, PolymorphicClass, ExplicitClass, char, unsigned,
       bool, float, double, void>();
+#if __cplusplus > 201703L
+  // In C++20 aggregates cannot have user-declared constructors.
+  static_assert(test_category<is_aggregate,
+		NoexceptMoveAssignClass>(false), "");
+  neg<NoexceptMoveAssignClass>();
+#endif
 }
diff --git a/libstdc++-v3/testsuite/20_util/optional/requirements.cc b/libstdc++-v3/testsuite/20_util/optional/requirements.cc
index 560e6f7691f..d8d52ab5367 100644
--- a/libstdc++-v3/testsuite/20_util/optional/requirements.cc
+++ b/libstdc++-v3/testsuite/20_util/optional/requirements.cc
@@ -312,7 +312,10 @@  struct JustEq {};
 bool operator==(const JustEq&, const JustEq&);
 
 static_assert(is_eq_comparable<optional<JustEq>>::value, "");
+#if __cplusplus == 201703L
+// In C++20 operator!= can be synthesized from operator==
 static_assert(!is_neq_comparable<optional<JustEq>>::value, "");
+#endif
 static_assert(!is_lt_comparable<optional<JustEq>>::value, "");
 static_assert(!is_gt_comparable<optional<JustEq>>::value, "");
 static_assert(!is_le_comparable<optional<JustEq>>::value, "");