Fix LWG issue #2106: move_iterators returning prvalues
llvm-svn: 267091
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 906c50859b0d75725850b770f87b71b9d541ecd4
diff --git a/include/iterator b/include/iterator
index e6f4723..0e60aa9 100644
--- a/include/iterator
+++ b/include/iterator
@@ -951,7 +951,12 @@
typedef typename iterator_traits<iterator_type>::difference_type difference_type;
typedef iterator_type pointer;
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
- typedef value_type&& reference;
+ typedef typename iterator_traits<iterator_type>::reference __reference;
+ typedef typename conditional<
+ is_reference<__reference>::value,
+ typename remove_reference<__reference>::type&&,
+ __reference
+ >::type reference;
#else
typedef typename iterator_traits<iterator_type>::reference reference;
#endif