[libcxx-commits] [libcxx] 7ea4fe7 - [libc++] Fix LWG3390: move_iterator now handles move-only iterators.
Arthur O'Dwyer via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jan 26 20:50:57 PST 2022
Author: Arthur O'Dwyer
Date: 2022-01-26T23:50:26-05:00
New Revision: 7ea4fe7ede204f3ec041c293441e8a007c3733b6
URL: https://github.com/llvm/llvm-project/commit/7ea4fe7ede204f3ec041c293441e8a007c3733b6
DIFF: https://github.com/llvm/llvm-project/commit/7ea4fe7ede204f3ec041c293441e8a007c3733b6.diff
LOG: [libc++] Fix LWG3390: move_iterator now handles move-only iterators.
This can't really be tested until C++20 move_iterator is completely implemented.
Differential Revision: https://reviews.llvm.org/D117327
Added:
Modified:
libcxx/docs/Status/Cxx20Issues.csv
libcxx/include/__iterator/move_iterator.h
Removed:
################################################################################
diff --git a/libcxx/docs/Status/Cxx20Issues.csv b/libcxx/docs/Status/Cxx20Issues.csv
index daa6466f87515..68e1c27302050 100644
--- a/libcxx/docs/Status/Cxx20Issues.csv
+++ b/libcxx/docs/Status/Cxx20Issues.csv
@@ -291,7 +291,7 @@
"`3387 <https://wg21.link/LWG3387>`__","|sect|\ [range.reverse.view] ``reverse_view<V>``\ unintentionally requires ``range<const V>``\ ","Prague","","","|ranges|"
"`3388 <https://wg21.link/LWG3388>`__","``view``\ iterator types have ill-formed ``<=>``\ operators","Prague","","","|ranges|"
"`3389 <https://wg21.link/LWG3389>`__","A move-only iterator still does not have a ``counted_iterator``\ ","Prague","","","|ranges|"
-"`3390 <https://wg21.link/LWG3390>`__","``make_move_iterator()``\ cannot be used to construct a ``move_iterator``\ for a move-only iterator","Prague","","","|ranges|"
+"`3390 <https://wg21.link/LWG3390>`__","``make_move_iterator()``\ cannot be used to construct a ``move_iterator``\ for a move-only iterator","Prague","|Complete|","14.0","|ranges|"
"`3393 <https://wg21.link/LWG3393>`__","Missing/incorrect feature test macro for coroutines","Prague","|Complete|","14.0"
"`3395 <https://wg21.link/LWG3395>`__","Definition for three-way comparison needs to be updated (US 152)","Prague","","","|spaceship|"
"`3396 <https://wg21.link/LWG3396>`__","Clarify point of reference for ``source_location::current()``\ (DE 169)","Prague","",""
diff --git a/libcxx/include/__iterator/move_iterator.h b/libcxx/include/__iterator/move_iterator.h
index 306ce240baf3f..29bac864c2755 100644
--- a/libcxx/include/__iterator/move_iterator.h
+++ b/libcxx/include/__iterator/move_iterator.h
@@ -12,6 +12,7 @@
#include <__config>
#include <__iterator/iterator_traits.h>
+#include <__utility/move.h>
#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -53,7 +54,7 @@ class _LIBCPP_TEMPLATE_VIS move_iterator
move_iterator() : __current_() {}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14
- explicit move_iterator(_Iter __i) : __current_(__i) {}
+ explicit move_iterator(_Iter __i) : __current_(_VSTD::move(__i)) {}
template <class _Up, class = __enable_if_t<
!is_same<_Up, _Iter>::value && is_convertible<const _Up&, _Iter>::value
@@ -176,7 +177,7 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX14
move_iterator<_Iter>
make_move_iterator(_Iter __i)
{
- return move_iterator<_Iter>(__i);
+ return move_iterator<_Iter>(_VSTD::move(__i));
}
_LIBCPP_END_NAMESPACE_STD
More information about the libcxx-commits
mailing list