]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libstdc++-v3/testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 21_strings / char_traits / requirements / constexpr_functions_c++20.cc
index 63c7c9cbb575f9217578ede19fb50ed819350d92..433cf6e25d8cab3e2594403828e248758400f041 100644 (file)
@@ -1,7 +1,7 @@
-// { dg-options "-std=gnu++2a" }
-// { dg-do compile { target c++2a } }
+// { dg-do compile { target c++20 } }
+// { dg-add-options no_pch }
 
-// Copyright (C) 2017-2020 Free Software Foundation, Inc.
+// Copyright (C) 2017-2024 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -25,11 +25,35 @@ template<typename CT>
   test_move()
   {
     using char_type = typename CT::char_type;
+
+    // Overlapping strings
     char_type s1[3] = {1, 2, 3};
     CT::move(s1+1, s1, 2);
-    return s1[0]==char_type{1} && s1[1]==char_type{1} && s1[2]==char_type{2};
+    if (s1[0] != char_type{1} || s1[1] != char_type{1} || s1[2] != char_type{2})
+      throw 1;
+    CT::move(s1, s1+1, 2);
+    if (s1[0] != char_type{1} || s1[1] != char_type{2} || s1[2] != char_type{2})
+      throw 2;
+
+    // Disjoint strings
+    char_type why_is_six_scared_of_seven[] = {4, 5, 6};
+    char_type because789[] = {7, 8, 9};
+    CT::move(why_is_six_scared_of_seven, because789, 3);
+    if (why_is_six_scared_of_seven[0] != char_type{7}
+       || why_is_six_scared_of_seven[1] != char_type{8}
+       || why_is_six_scared_of_seven[2] != char_type{9})
+      throw 3;
+
+    return true;
   }
 
+#ifndef __cpp_lib_constexpr_string
+# error Feature-test macro for constexpr char_traits is missing
+#elif __cpp_lib_constexpr_string < 201811
+# error Feature-test macro for constexpr char_traits has the wrong value
+#endif
+
+// We also provide this non-standard macro for P0426R1 and P1032R1.
 #ifndef __cpp_lib_constexpr_char_traits
 # error Feature-test macro for constexpr char_traits is missing
 #elif __cpp_lib_constexpr_char_traits != 201811
@@ -37,9 +61,7 @@ template<typename CT>
 #endif
 
 static_assert( test_move<std::char_traits<char>>() );
-#ifdef _GLIBCXX_USE_WCHAR_T
 static_assert( test_move<std::char_traits<wchar_t>>() );
-#endif
 #ifdef _GLIBCXX_USE_CHAR8_T
 static_assert( test_move<std::char_traits<char8_t>>() );
 #endif