diff options
4 files changed, 9 insertions, 49 deletions
diff --git a/libcxx/include/iterator b/libcxx/include/iterator index 5aa784f2e61..4c6b0a6075b 100644 --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -536,8 +536,6 @@ class _LIBCPP_TYPE_VIS_ONLY reverse_iterator typename iterator_traits<_Iter>::pointer, typename iterator_traits<_Iter>::reference> { -private: - mutable _Iter __t; protected: _Iter current; public: @@ -547,11 +545,11 @@ public: typedef typename iterator_traits<_Iter>::pointer pointer; _LIBCPP_INLINE_VISIBILITY reverse_iterator() : current() {} - _LIBCPP_INLINE_VISIBILITY explicit reverse_iterator(_Iter __x) : __t(__x), current(__x) {} + _LIBCPP_INLINE_VISIBILITY explicit reverse_iterator(_Iter __x) : current(__x) {} template <class _Up> _LIBCPP_INLINE_VISIBILITY reverse_iterator(const reverse_iterator<_Up>& __u) - : __t(__u.base()), current(__u.base()) {} + : current(__u.base()) {} _LIBCPP_INLINE_VISIBILITY _Iter base() const {return current;} - _LIBCPP_INLINE_VISIBILITY reference operator*() const {__t = current; return *--__t;} + _LIBCPP_INLINE_VISIBILITY reference operator*() const {_Iter __tmp = current; return *--__tmp;} _LIBCPP_INLINE_VISIBILITY pointer operator->() const {return _VSTD::addressof(operator*());} _LIBCPP_INLINE_VISIBILITY reverse_iterator& operator++() {--current; return *this;} _LIBCPP_INLINE_VISIBILITY reverse_iterator operator++(int) diff --git a/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star/op_star.pass.cpp b/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star/op_star.pass.cpp index 7055e27bb24..7a7759843ee 100644 --- a/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star/op_star.pass.cpp +++ b/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.op.star/op_star.pass.cpp @@ -15,6 +15,8 @@ // Be sure to respect LWG 198: // http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#198 +// LWG 198 was superseded by LWG 2360 +// http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2360 #include <iterator> #include <cassert> @@ -31,26 +33,6 @@ public: }; template <class It> -class weird_iterator -{ - It it_; -public: - typedef It value_type; - typedef std::bidirectional_iterator_tag iterator_category; - typedef std::ptrdiff_t difference_type; - typedef It* pointer; - typedef It& reference; - - weird_iterator() {} - explicit weird_iterator(It it) : it_(it) {} - ~weird_iterator() {it_ = It();} - - reference operator*() {return it_;} - - weird_iterator& operator--() {return *this;} -}; - -template <class It> void test(It i, typename std::iterator_traits<It>::value_type x) { @@ -60,7 +42,6 @@ test(It i, typename std::iterator_traits<It>::value_type x) int main() { - test(weird_iterator<A>(A()), A()); A a; test(&a+1, A()); } diff --git a/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp b/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp index fc57deab678..efbdf1406c9 100644 --- a/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp +++ b/libcxx/test/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp @@ -15,6 +15,9 @@ // Be sure to respect LWG 198: // http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#198 +// LWG 198 was superseded by LWG 2360 +// http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2360 + #include <iterator> #include <list> @@ -34,27 +37,6 @@ public: }; template <class It> -class weird_iterator -{ - It it_; -public: - typedef It value_type; - typedef std::bidirectional_iterator_tag iterator_category; - typedef std::ptrdiff_t difference_type; - typedef It* pointer; - typedef It& reference; - - weird_iterator() {} - explicit weird_iterator(It it) : it_(it) {} - ~weird_iterator() {it_ = It();} - - reference operator*() {return it_;} - pointer operator->() {return &it_;} - - weird_iterator& operator--() {return *this;} -}; - -template <class It> void test(It i, typename std::iterator_traits<It>::value_type x) { @@ -79,7 +61,6 @@ public: int main() { - test(weird_iterator<A>(A()), A()); A a; test(&a+1, A()); diff --git a/libcxx/www/cxx1y_status.html b/libcxx/www/cxx1y_status.html index c282572ec3c..199cf4fc387 100644 --- a/libcxx/www/cxx1y_status.html +++ b/libcxx/www/cxx1y_status.html @@ -265,7 +265,7 @@ <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2356">2356</a></td><td>Stability of erasure in unordered associative containers</td><td>Issaquah</td><td>Complete</td></tr> <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2357">2357</a></td><td>Remaining "Assignable" requirement</td><td>Issaquah</td><td>Complete</td></tr> <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2359">2359</a></td><td>How does regex_constants::nosubs affect basic_regex::mark_count()?</td><td>Issaquah</td><td>Complete</td></tr> - <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2360">2360</a></td><td>reverse_iterator::operator*() is unimplementable</td><td>Issaquah</td><td></td></tr> + <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2360">2360</a></td><td>reverse_iterator::operator*() is unimplementable</td><td>Issaquah</td><td>Complete</td></tr> <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2104">2104</a></td><td>unique_lock move-assignment should not be noexcept</td><td>Issaquah</td><td></td></tr> <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2186">2186</a></td><td>Incomplete action on async/launch::deferred</td><td>Issaquah</td><td></td></tr> <tr><td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2075">2075</a></td><td>Progress guarantees, lock-free property, and scheduling assumptions</td><td>Issaquah</td><td></td></tr> |

