diff --git a/libcxx/test/support/test_iterators.h b/libcxx/test/support/test_iterators.h --- a/libcxx/test/support/test_iterators.h +++ b/libcxx/test/support/test_iterators.h @@ -33,8 +33,12 @@ typedef typename std::iterator_traits::reference reference; TEST_CONSTEXPR explicit cpp17_output_iterator(It it) : it_(std::move(it)) {} + template - TEST_CONSTEXPR cpp17_output_iterator(const cpp17_output_iterator& u) :it_(u.it_) {} + TEST_CONSTEXPR cpp17_output_iterator(const cpp17_output_iterator& u) : it_(u.it_) {} + + template ::value>::type> + TEST_CONSTEXPR cpp17_output_iterator(cpp17_output_iterator&& u) : it_(u.it_) { u.it_ = U(); } TEST_CONSTEXPR reference operator*() const {return *it_;} @@ -67,8 +71,12 @@ typedef typename Traits::reference reference; TEST_CONSTEXPR explicit cpp17_input_iterator(It it) : it_(it) {} + template - TEST_CONSTEXPR cpp17_input_iterator(const cpp17_input_iterator& u) : it_(u.it_) {} + TEST_CONSTEXPR cpp17_input_iterator(const cpp17_input_iterator& u) : it_(u.it_) {} + + template ::value>::type> + TEST_CONSTEXPR cpp17_input_iterator(cpp17_input_iterator&& u) : it_(u.it_) { u.it_ = U(); } TEST_CONSTEXPR reference operator*() const {return *it_;} @@ -102,8 +110,12 @@ TEST_CONSTEXPR forward_iterator() : it_() {} TEST_CONSTEXPR explicit forward_iterator(It it) : it_(it) {} + template - TEST_CONSTEXPR forward_iterator(const forward_iterator& u) : it_(u.it_) {} + TEST_CONSTEXPR forward_iterator(const forward_iterator& u) : it_(u.it_) {} + + template ::value>::type> + TEST_CONSTEXPR forward_iterator(forward_iterator&& other) : it_(other.it_) { other.it_ = U(); } TEST_CONSTEXPR reference operator*() const {return *it_;} @@ -134,8 +146,12 @@ TEST_CONSTEXPR bidirectional_iterator() : it_() {} TEST_CONSTEXPR explicit bidirectional_iterator(It it) : it_(it) {} + template - TEST_CONSTEXPR bidirectional_iterator(const bidirectional_iterator& u) : it_(u.it_) {} + TEST_CONSTEXPR bidirectional_iterator(const bidirectional_iterator& u) : it_(u.it_) {} + + template ::value>::type> + TEST_CONSTEXPR bidirectional_iterator(bidirectional_iterator&& u) : it_(u.it_) { u.it_ = U(); } TEST_CONSTEXPR reference operator*() const {return *it_;} @@ -168,8 +184,12 @@ TEST_CONSTEXPR random_access_iterator() : it_() {} TEST_CONSTEXPR explicit random_access_iterator(It it) : it_(it) {} + template - TEST_CONSTEXPR random_access_iterator(const random_access_iterator& u) : it_(u.it_) {} + TEST_CONSTEXPR random_access_iterator(const random_access_iterator& u) : it_(u.it_) {} + + template ::value>::type> + TEST_CONSTEXPR random_access_iterator(random_access_iterator&& u) : it_(u.it_) { u.it_ = U(); } TEST_CONSTEXPR_CXX14 reference operator*() const {return *it_;} TEST_CONSTEXPR_CXX14 reference operator[](difference_type n) const {return it_[n];} @@ -220,8 +240,12 @@ TEST_CONSTEXPR_CXX14 contiguous_iterator() : it_() {} TEST_CONSTEXPR_CXX14 explicit contiguous_iterator(It it) : it_(it) {} + template - TEST_CONSTEXPR_CXX14 contiguous_iterator(const contiguous_iterator& u) : it_(u.it_) {} + TEST_CONSTEXPR_CXX14 contiguous_iterator(const contiguous_iterator& u) : it_(u.it_) {} + + template ::value>::type> + TEST_CONSTEXPR_CXX14 contiguous_iterator(contiguous_iterator&& u) : it_(u.it_) { u.it_ = U(); } TEST_CONSTEXPR reference operator*() const {return *it_;} TEST_CONSTEXPR pointer operator->() const {return it_;} @@ -272,9 +296,13 @@ constexpr three_way_contiguous_iterator() : it_() {} constexpr explicit three_way_contiguous_iterator(It it) : it_(it) {} + template constexpr three_way_contiguous_iterator(const three_way_contiguous_iterator& u) : it_(u.it_) {} + template ::value>::type> + constexpr three_way_contiguous_iterator(three_way_contiguous_iterator&& u) : it_(u.it_) { u.it_ = U(); } + constexpr reference operator*() const {return *it_;} constexpr pointer operator->() const {return it_;} constexpr reference operator[](difference_type n) const {return it_[n];}