aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/libcxx/include/__iterator/iter_move.h
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2023-12-25 17:35:41 +0000
committerDimitry Andric <dim@FreeBSD.org>2024-04-06 20:13:06 +0000
commitcb14a3fe5122c879eae1fb480ed7ce82a699ddb6 (patch)
treeb983a613c35ece61d561b5a9ef9cd66419f6c7fb /contrib/llvm-project/libcxx/include/__iterator/iter_move.h
parent3d68ee6cbdb244de9fab1df8a2525d2fa592571e (diff)
parent99aabd70801bd4bc72c4942747f6d62c675112f5 (diff)
downloadsrc-cb14a3fe5122c879eae1fb480ed7ce82a699ddb6.tar.gz
src-cb14a3fe5122c879eae1fb480ed7ce82a699ddb6.zip
Diffstat (limited to 'contrib/llvm-project/libcxx/include/__iterator/iter_move.h')
-rw-r--r--contrib/llvm-project/libcxx/include/__iterator/iter_move.h68
1 files changed, 31 insertions, 37 deletions
diff --git a/contrib/llvm-project/libcxx/include/__iterator/iter_move.h b/contrib/llvm-project/libcxx/include/__iterator/iter_move.h
index d9ff90bf6545..202b94cccc5a 100644
--- a/contrib/llvm-project/libcxx/include/__iterator/iter_move.h
+++ b/contrib/llvm-project/libcxx/include/__iterator/iter_move.h
@@ -38,66 +38,60 @@ namespace __iter_move {
void iter_move();
template <class _Tp>
-concept __unqualified_iter_move =
- __class_or_enum<remove_cvref_t<_Tp>> &&
- requires (_Tp&& __t) {
- // NOLINTNEXTLINE(libcpp-robust-against-adl) iter_swap ADL calls should only be made through ranges::iter_swap
- iter_move(std::forward<_Tp>(__t));
- };
-
-template<class _Tp>
-concept __move_deref =
- !__unqualified_iter_move<_Tp> &&
- requires (_Tp&& __t) {
- *__t;
- requires is_lvalue_reference_v<decltype(*__t)>;
- };
-
-template<class _Tp>
-concept __just_deref =
- !__unqualified_iter_move<_Tp> &&
- !__move_deref<_Tp> &&
- requires (_Tp&& __t) {
- *__t;
- requires (!is_lvalue_reference_v<decltype(*__t)>);
- };
+concept __unqualified_iter_move = __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
+ // NOLINTNEXTLINE(libcpp-robust-against-adl) iter_swap ADL calls should only be made through ranges::iter_swap
+ iter_move(std::forward<_Tp>(__t));
+};
+
+template <class _Tp>
+concept __move_deref = !__unqualified_iter_move<_Tp> && requires(_Tp&& __t) {
+ *__t;
+ requires is_lvalue_reference_v<decltype(*__t)>;
+};
+
+template <class _Tp>
+concept __just_deref = !__unqualified_iter_move<_Tp> && !__move_deref<_Tp> && requires(_Tp&& __t) {
+ *__t;
+ requires(!is_lvalue_reference_v<decltype(*__t)>);
+};
// [iterator.cust.move]
struct __fn {
// NOLINTBEGIN(libcpp-robust-against-adl) iter_move ADL calls should only be made through ranges::iter_move
- template<class _Ip>
+ template <class _Ip>
requires __unqualified_iter_move<_Ip>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator()(_Ip&& __i) const
- noexcept(noexcept(iter_move(std::forward<_Ip>(__i))))
- {
+ noexcept(noexcept(iter_move(std::forward<_Ip>(__i)))) {
return iter_move(std::forward<_Ip>(__i));
}
// NOLINTEND(libcpp-robust-against-adl)
- template<class _Ip>
+ template <class _Ip>
requires __move_deref<_Ip>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Ip&& __i) const
- noexcept(noexcept(std::move(*std::forward<_Ip>(__i))))
- -> decltype( std::move(*std::forward<_Ip>(__i)))
- { return std::move(*std::forward<_Ip>(__i)); }
+ noexcept(noexcept(std::move(*std::forward<_Ip>(__i)))) -> decltype(std::move(*std::forward<_Ip>(__i))) {
+ return std::move(*std::forward<_Ip>(__i));
+ }
- template<class _Ip>
+ template <class _Ip>
requires __just_deref<_Ip>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Ip&& __i) const
- noexcept(noexcept(*std::forward<_Ip>(__i)))
- -> decltype( *std::forward<_Ip>(__i))
- { return *std::forward<_Ip>(__i); }
+ noexcept(noexcept(*std::forward<_Ip>(__i))) -> decltype(*std::forward<_Ip>(__i)) {
+ return *std::forward<_Ip>(__i);
+ }
};
} // namespace __iter_move
inline namespace __cpo {
- inline constexpr auto iter_move = __iter_move::__fn{};
+inline constexpr auto iter_move = __iter_move::__fn{};
} // namespace __cpo
} // namespace ranges
-template<__dereferenceable _Tp>
- requires requires(_Tp& __t) { { ranges::iter_move(__t) } -> __can_reference; }
+template <__dereferenceable _Tp>
+ requires requires(_Tp& __t) {
+ { ranges::iter_move(__t) } -> __can_reference;
+ }
using iter_rvalue_reference_t = decltype(ranges::iter_move(std::declval<_Tp&>()));
#endif // _LIBCPP_STD_VER >= 20