diff options
Diffstat (limited to 'libcxx/include/__iterator/move_iterator.h')
| -rw-r--r-- | libcxx/include/__iterator/move_iterator.h | 65 | 
1 files changed, 37 insertions, 28 deletions
| diff --git a/libcxx/include/__iterator/move_iterator.h b/libcxx/include/__iterator/move_iterator.h index 6be9f216dbb4..fa806dbaf70e 100644 --- a/libcxx/include/__iterator/move_iterator.h +++ b/libcxx/include/__iterator/move_iterator.h @@ -24,8 +24,16 @@  #include <__iterator/iterator_traits.h>  #include <__iterator/move_sentinel.h>  #include <__iterator/readable_traits.h> +#include <__type_traits/conditional.h> +#include <__type_traits/enable_if.h> +#include <__type_traits/is_assignable.h> +#include <__type_traits/is_constructible.h> +#include <__type_traits/is_convertible.h> +#include <__type_traits/is_reference.h> +#include <__type_traits/is_same.h> +#include <__type_traits/remove_reference.h> +#include <__utility/declval.h>  #include <__utility/move.h> -#include <type_traits>  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)  #  pragma GCC system_header @@ -49,7 +57,7 @@ struct __move_iter_category_base<_Iter> {  template<class _Iter, class _Sent>  concept __move_iter_comparable = requires { -    { declval<const _Iter&>() == declval<_Sent>() } -> convertible_to<bool>; +    { std::declval<const _Iter&>() == std::declval<_Sent>() } -> convertible_to<bool>;  };  #endif // _LIBCPP_STD_VER > 17 @@ -82,18 +90,18 @@ public:      typedef typename iterator_traits<iterator_type>::reference __reference;      typedef typename conditional<              is_reference<__reference>::value, -            typename remove_reference<__reference>::type&&, +            __libcpp_remove_reference_t<__reference>&&,              __reference          >::type reference;  #endif // _LIBCPP_STD_VER > 17 -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      explicit move_iterator(_Iter __i) : __current_(std::move(__i)) {} -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator& operator++() { ++__current_; return *this; } -    _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_DEPRECATED_IN_CXX20 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      pointer operator->() const { return __current_; }  #if _LIBCPP_STD_VER > 17 @@ -133,13 +141,13 @@ public:      _LIBCPP_HIDE_FROM_ABI constexpr      void operator++(int) { ++__current_; }  #else -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator() : __current_() {}      template <class _Up, class = __enable_if_t<          !is_same<_Up, _Iter>::value && is_convertible<const _Up&, _Iter>::value      > > -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator(const move_iterator<_Up>& __u) : __current_(__u.base()) {}      template <class _Up, class = __enable_if_t< @@ -147,35 +155,35 @@ public:          is_convertible<const _Up&, _Iter>::value &&          is_assignable<_Iter&, const _Up&>::value      > > -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator& operator=(const move_iterator<_Up>& __u) {          __current_ = __u.base();          return *this;      } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      _Iter base() const { return __current_; } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      reference operator*() const { return static_cast<reference>(*__current_); } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      reference operator[](difference_type __n) const { return static_cast<reference>(__current_[__n]); } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator operator++(int) { move_iterator __tmp(*this); ++__current_; return __tmp; }  #endif // _LIBCPP_STD_VER > 17 -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator& operator--() { --__current_; return *this; } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator operator--(int) { move_iterator __tmp(*this); --__current_; return __tmp; } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator operator+(difference_type __n) const { return move_iterator(__current_ + __n); } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator& operator+=(difference_type __n) { __current_ += __n; return *this; } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator operator-(difference_type __n) const { return move_iterator(__current_ - __n); } -    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +    _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17      move_iterator& operator-=(difference_type __n) { __current_ -= __n; return *this; }  #if _LIBCPP_STD_VER > 17 @@ -222,9 +230,10 @@ private:      _Iter __current_;  }; +_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(move_iterator);  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  bool operator==(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)  {      return __x.base() == __y.base(); @@ -232,7 +241,7 @@ bool operator==(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& _  #if _LIBCPP_STD_VER <= 17  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  bool operator!=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)  {      return __x.base() != __y.base(); @@ -240,28 +249,28 @@ bool operator!=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& _  #endif // _LIBCPP_STD_VER <= 17  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  bool operator<(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)  {      return __x.base() < __y.base();  }  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  bool operator>(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)  {      return __x.base() > __y.base();  }  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  bool operator<=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)  {      return __x.base() <= __y.base();  }  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  bool operator>=(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)  {      return __x.base() >= __y.base(); @@ -279,7 +288,7 @@ auto operator<=>(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>&  #ifndef _LIBCPP_CXX03_LANG  template <class _Iter1, class _Iter2> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  auto operator-(const move_iterator<_Iter1>& __x, const move_iterator<_Iter2>& __y)      -> decltype(__x.base() - __y.base())  { @@ -305,7 +314,7 @@ move_iterator<_Iter> operator+(iter_difference_t<_Iter> __n, const move_iterator  }  #else  template <class _Iter> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  move_iterator<_Iter>  operator+(typename move_iterator<_Iter>::difference_type __n, const move_iterator<_Iter>& __x)  { @@ -314,7 +323,7 @@ operator+(typename move_iterator<_Iter>::difference_type __n, const move_iterato  #endif // _LIBCPP_STD_VER > 17  template <class _Iter> -inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14 +inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17  move_iterator<_Iter>  make_move_iterator(_Iter __i)  { | 
