]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: missing constexpr for __[nm]iter_base [PR102358]
authorPatrick Palka <ppalka@redhat.com>
Thu, 21 Oct 2021 16:13:35 +0000 (12:13 -0400)
committerPatrick Palka <ppalka@redhat.com>
Thu, 21 Oct 2021 16:13:35 +0000 (12:13 -0400)
PR libstdc++/102358

libstdc++-v3/ChangeLog:

* include/bits/stl_iterator.h (__niter_base): Make constexpr
for C++20.
(__miter_base): Likewise.
* testsuite/25_algorithms/move/constexpr.cc: New test.

libstdc++-v3/include/bits/stl_iterator.h
libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc [new file with mode: 0644]

index 0090b2d598fb2545e19a6e2076e599f2734b9476..f6504ece56080a7b8cd12b5f5f36d9d60827ec8a 100644 (file)
@@ -2472,6 +2472,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// @} group iterators
 
   template<typename _Iterator>
+    _GLIBCXX20_CONSTEXPR
     auto
     __niter_base(move_iterator<_Iterator> __it)
     -> decltype(make_move_iterator(__niter_base(__it.base())))
@@ -2485,6 +2486,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     };
 
   template<typename _Iterator>
+    _GLIBCXX20_CONSTEXPR
     auto
     __miter_base(move_iterator<_Iterator> __it)
     -> decltype(__miter_base(__it.base()))
diff --git a/libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc b/libstdc++-v3/testsuite/25_algorithms/move/constexpr.cc
new file mode 100644 (file)
index 0000000..773c55c
--- /dev/null
@@ -0,0 +1,19 @@
+// { dg-options "-std=gnu++20" }
+// { dg-do compile { target c++20 } }
+
+#include <algorithm>
+#include <span>
+
+constexpr bool
+test01()
+{
+  // PR libstdc++/102358
+  int x[2] = {1,2}, y[2];
+  std::span in(x), out(y);
+  std::move(std::move_iterator(in.begin()), std::move_iterator(in.end()),
+           out.begin());
+  return std::equal(std::move_iterator(in.begin()), std::move_iterator(in.end()),
+                   std::move_iterator(out.begin()));
+}
+
+static_assert(test01());