diff options
author | glisse <glisse@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-11 19:23:49 +0000 |
---|---|---|
committer | glisse <glisse@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-11 19:23:49 +0000 |
commit | 3b4923ce8505182ce3054235f3f8b2bc3172b1c5 (patch) | |
tree | 0118e4dad175f402207a2fd5dfbb1b0f0baca2f9 /libstdc++-v3/include/bits | |
parent | ceaf91adc43f95ee40d706cabdad9bc4a1ca25fa (diff) | |
download | gcc-3b4923ce8505182ce3054235f3f8b2bc3172b1c5.tar.gz |
2014-04-11 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/59434
* include/bits/stl_iterator.h (move_iterator::reference,
move_iterator::operator*): Implement LWG 2106.
* testsuite/24_iterators/move_iterator/dr2106.cc: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209323 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/bits')
-rw-r--r-- | libstdc++-v3/include/bits/stl_iterator.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index 1d2a52419d9..16f992c7490 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -965,6 +965,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Iterator _M_current; typedef iterator_traits<_Iterator> __traits_type; + typedef typename __traits_type::reference __base_ref; public: typedef _Iterator iterator_type; @@ -973,7 +974,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef typename __traits_type::difference_type difference_type; // NB: DR 680. typedef _Iterator pointer; - typedef value_type&& reference; + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 2106. move_iterator wrapping iterators returning prvalues + typedef typename conditional<is_reference<__base_ref>::value, + typename remove_reference<__base_ref>::type&&, + __base_ref>::type reference; move_iterator() : _M_current() { } @@ -992,7 +997,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION reference operator*() const - { return std::move(*_M_current); } + { return static_cast<reference>(*_M_current); } pointer operator->() const |