[libc++] Add std::ranges::iter_move and std::iter_rvalue_reference_t
Original patch by @cjdb, modified by @ldionne.
Differential Revision: https://reviews.llvm.org/D99873
GitOrigin-RevId: 97e383aa061b3389e9744f55672f70d1a5c0889d
diff --git a/include/iterator b/include/iterator
index 2785fec..3424435 100644
--- a/include/iterator
+++ b/include/iterator
@@ -35,6 +35,14 @@
template<dereferenceable T>
using iter_reference_t = decltype(*declval<T&>());
+namespace ranges::inline unspecified {
+ inline constexpr unspecified iter_move = unspecified; // since C++20, nodiscard as an extension
+}}
+
+template<dereferenceable T>
+ requires ...
+using iter_rvalue_reference_t = decltype(ranges::iter_move(declval<T&>())); // since C++20
+
template<class Category, class T, class Distance = ptrdiff_t,
class Pointer = T*, class Reference = T&>
struct iterator
@@ -422,6 +430,7 @@
#include <cstddef>
#include <initializer_list>
#include <__iterator/incrementable_traits.h>
+#include <__iterator/iter_move.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/readable_traits.h>
#include <__memory/addressof.h>