diff options
author | halyavin <halyavin@yandex-team.com> | 2023-09-26 11:14:38 +0300 |
---|---|---|
committer | halyavin <halyavin@yandex-team.com> | 2023-09-26 11:42:52 +0300 |
commit | 7fcf8b470c7f4b97acf6f2833afa770c1372f231 (patch) | |
tree | c7583ae7054d92eb5788c03760b6b9c50f7cc6c6 /contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h | |
parent | 4c226ec97b09cd6fc38f8a0bbe57f52d384abe3f (diff) | |
download | ydb-7fcf8b470c7f4b97acf6f2833afa770c1372f231.tar.gz |
Update libc++ to 9b03c08e (6 Mar 2022).
Notable changes:
* don't warn that coroutines are not supported when using experimental/coroutine
* add _LIBCPP_HIDE_FROM_ABI to __quoted_proxy constructors
* ADL-proof calls of __quoted
* fix ctype facet `is` method for Windows
* change return type of bit_width to int (LWG3656)
* make private __wrap_iter constructors explicit
* fix delayed initialization of `__fill_` in basic_ios
* ranges::iter_move cleanup
* ADL-proof __synth_three_way
* reject random number generators with signed types
* use C++ overloads from math.h on AIX
* add explicit to some internal constructors
* replace _LIBCPP_HAS_NO_STRONG_ENUMS with C++ version check
* use `inline constexpr bool` instead of `constexpr bool` for helpers in ranges
* reject uniform_int_distribution<bool>, uniform_int_distribution<char> and all user types
* allow std::mergeable and std::sortable even with incomplete ranges
* fix double close bug in std::filesystem::remove_all
* remove recursion in basic_string::insert because it interferes with constexpr
* fix error checking of wctob_l calls
* pack _Flags class on AIX
* fix integer type in __estimate_column_width exposed by AIX
* qualify all std::move calls with std
* make chrono includes granular
* set std::numeric_limits::tinyness_before to true on ARM
* add ranges::in_found_result and ranges::min_max_result
Diffstat (limited to 'contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h')
-rw-r--r-- | contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h index 4a89662927..97d54c4a82 100644 --- a/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h +++ b/contrib/libs/cxxsupp/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 |