aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2008-10-07 14:49:20 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-10-07 14:49:20 +0000
commit5defb0f2085dc651c1d36539198da5d72fa09516 (patch)
tree19d70c07846160ccf8819552a01f63d97da3f44f
parentebca2d912914002b1b3953bb535b2e664047b05e (diff)
downloadgcc-5defb0f2085dc651c1d36539198da5d72fa09516.zip
gcc-5defb0f2085dc651c1d36539198da5d72fa09516.tar.gz
gcc-5defb0f2085dc651c1d36539198da5d72fa09516.tar.bz2
stl_iterator.h (operator-(const reverse_iterator<>&, const reverse_iterator<>&), [...]): Use the auto -> return type syntax, implement DR 685.
2008-10-07 Paolo Carlini <paolo.carlini@oracle.com> * include/bits/stl_iterator.h (operator-(const reverse_iterator<>&, const reverse_iterator<>&), operator-(const __normal_iterator<>&, const __normal_iterator<>&), operator-(const move_iterator<>&, const move_iterator<>&)): Use the auto -> return type syntax, implement DR 685. From-SVN: r140937
-rw-r--r--libstdc++-v3/ChangeLog8
-rw-r--r--libstdc++-v3/include/bits/stl_iterator.h20
2 files changed, 27 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7ab200b..90c4882 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,11 @@
+2008-10-07 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/stl_iterator.h (operator-(const reverse_iterator<>&,
+ const reverse_iterator<>&), operator-(const __normal_iterator<>&,
+ const __normal_iterator<>&), operator-(const move_iterator<>&,
+ const move_iterator<>&)): Use the auto -> return type syntax,
+ implement DR 685.
+
2008-10-06 Jason Merrill <jason@redhat.com>
* config/abi/pre/gnu.ver: Update char16/32_t manglings.
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 0d66129..d161e30 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -365,9 +365,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ return !(__x < __y); }
template<typename _IteratorL, typename _IteratorR>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // DR 685.
+ inline auto
+ operator-(const reverse_iterator<_IteratorL>& __x,
+ const reverse_iterator<_IteratorR>& __y)
+ -> decltype(__y.base() - __x.base())
+#else
inline typename reverse_iterator<_IteratorL>::difference_type
operator-(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
+#endif
{ return __y.base() - __x.base(); }
//@}
@@ -835,9 +843,17 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
// operators but also operator- must accept mixed iterator/const_iterator
// parameters.
template<typename _IteratorL, typename _IteratorR, typename _Container>
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ // DR 685.
+ inline auto
+ operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
+ const __normal_iterator<_IteratorR, _Container>& __rhs)
+ -> decltype(__lhs.base() - __rhs.base())
+#else
inline typename __normal_iterator<_IteratorL, _Container>::difference_type
operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
+#endif
{ return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Container>
@@ -1001,10 +1017,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
const move_iterator<_IteratorR>& __y)
{ return !(__x < __y); }
+ // DR 685.
template<typename _IteratorL, typename _IteratorR>
- inline typename move_iterator<_IteratorL>::difference_type
+ inline auto
operator-(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
+ -> decltype(__x.base() - __y.base())
{ return __x.base() - __y.base(); }
template<typename _Iterator>