[libcxx-commits] [libcxx] dc1c676 - [libc++] Preliminary cleanups to ranges::iter_move. NFC.
Arthur O'Dwyer via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Mar 2 14:51:36 PST 2022
Author: Arthur O'Dwyer
Date: 2022-03-02T17:51:17-05:00
New Revision: dc1c67624bb813d80b2c177a45415d592ac44617
URL: https://github.com/llvm/llvm-project/commit/dc1c67624bb813d80b2c177a45415d592ac44617
DIFF: https://github.com/llvm/llvm-project/commit/dc1c67624bb813d80b2c177a45415d592ac44617.diff
LOG: [libc++] Preliminary cleanups to ranges::iter_move. NFC.
This is just getting some non-functional cleanups out of the way
prior to the meat of the change in D120417.
Added:
Modified:
libcxx/include/__iterator/iter_move.h
Removed:
################################################################################
diff --git a/libcxx/include/__iterator/iter_move.h b/libcxx/include/__iterator/iter_move.h
index 4a89662927860..97d54c4a825cf 100644
--- a/libcxx/include/__iterator/iter_move.h
+++ b/libcxx/include/__iterator/iter_move.h
@@ -10,11 +10,11 @@
#ifndef _LIBCPP___ITERATOR_ITER_MOVE_H
#define _LIBCPP___ITERATOR_ITER_MOVE_H
+#include <__concepts/class_or_enum.h>
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <concepts> // __class_or_enum
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -36,44 +36,32 @@ template <class _Tp>
concept __unqualified_iter_move =
__class_or_enum<remove_cvref_t<_Tp>> &&
requires (_Tp&& __t) {
- iter_move(_VSTD::forward<_Tp>(__t));
+ iter_move(std::forward<_Tp>(__t));
};
-// [iterator.cust.move]/1
-// The name ranges::iter_move denotes a customization point object.
-// The expression ranges::iter_move(E) for a subexpression E is
-// expression-equivalent to:
+// [iterator.cust.move]
+
struct __fn {
- // [iterator.cust.move]/1.1
- // iter_move(E), if E has class or enumeration type and iter_move(E) is a
- // well-formed expression when treated as an unevaluated operand, [...]
template<class _Ip>
- requires __class_or_enum<remove_cvref_t<_Ip>> && __unqualified_iter_move<_Ip>
+ requires __unqualified_iter_move<_Ip>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator()(_Ip&& __i) const
- noexcept(noexcept(iter_move(_VSTD::forward<_Ip>(__i))))
+ noexcept(noexcept(iter_move(std::forward<_Ip>(__i))))
{
- return iter_move(_VSTD::forward<_Ip>(__i));
+ return iter_move(std::forward<_Ip>(__i));
}
- // [iterator.cust.move]/1.2
- // Otherwise, if the expression *E is well-formed:
- // 1.2.1 if *E is an lvalue, std::move(*E);
- // 1.2.2 otherwise, *E.
template<class _Ip>
- requires (!(__class_or_enum<remove_cvref_t<_Ip>> && __unqualified_iter_move<_Ip>)) &&
- requires(_Ip&& __i) { *_VSTD::forward<_Ip>(__i); }
+ requires (!__unqualified_iter_move<_Ip>) &&
+ requires { *declval<_Ip>(); }
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) operator()(_Ip&& __i) const
- noexcept(noexcept(*_VSTD::forward<_Ip>(__i)))
+ noexcept(noexcept(*std::forward<_Ip>(__i)))
{
- if constexpr (is_lvalue_reference_v<decltype(*_VSTD::forward<_Ip>(__i))>) {
- return _VSTD::move(*_VSTD::forward<_Ip>(__i));
+ if constexpr (is_lvalue_reference_v<decltype(*declval<_Ip>())>) {
+ return std::move(*std::forward<_Ip>(__i));
} else {
- return *_VSTD::forward<_Ip>(__i);
+ return *std::forward<_Ip>(__i);
}
}
-
- // [iterator.cust.move]/1.3
- // Otherwise, ranges::iter_move(E) is ill-formed.
};
} // namespace __iter_move
More information about the libcxx-commits
mailing list