From e356070e1a1fbabf44b7a1bd068a8afa6c9d8025 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Wed, 11 Dec 2013 07:25:36 +0000 Subject: [PATCH] Merging r-196058: ------------------------------------------------------------------------ r196058 | marshall | 2013-12-01 19:24:33 -0800 (Sun, 01 Dec 2013) | 1 line Fix for PRPR17934; based on a fix suggested by Peter Sommerlad ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/libcxx/branches/release_34@197013 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/iterator | 95 ++++++++++--------- .../sequences/array/iterators.pass.cpp | 38 ++------ .../iterator.range/begin-end.pass.cpp | 1 - 3 files changed, 59 insertions(+), 75 deletions(-) diff --git a/include/iterator b/include/iterator index 1c59919e..d16aa2aa 100644 --- a/include/iterator +++ b/include/iterator @@ -1387,22 +1387,6 @@ operator+(typename __wrap_iter<_Iter>::difference_type __n, #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_TRAILING_RETURN) -template -inline _LIBCPP_INLINE_VISIBILITY -_Tp* -begin(_Tp (&__array)[_Np]) -{ - return __array; -} - -template -inline _LIBCPP_INLINE_VISIBILITY -_Tp* -end(_Tp (&__array)[_Np]) -{ - return __array + _Np; -} - template inline _LIBCPP_INLINE_VISIBILITY auto @@ -1437,46 +1421,18 @@ end(const _Cp& __c) -> decltype(__c.end()) #if _LIBCPP_STD_VER > 11 -template -inline _LIBCPP_INLINE_VISIBILITY -reverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np]) -{ - return reverse_iterator<_Tp*>(__array + _Np); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -reverse_iterator<_Tp*> rend(_Tp (&__array)[_Np]) -{ - return reverse_iterator<_Tp*>(__array); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -reverse_iterator rbegin(initializer_list<_Ep> __il) -{ - return reverse_iterator(__il.end()); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -reverse_iterator rend(initializer_list<_Ep> __il) -{ - return reverse_iterator(__il.begin()); -} - template inline _LIBCPP_INLINE_VISIBILITY auto cbegin(const _Cp& __c) -> decltype(begin(__c)) { - return _VSTD::begin(__c); + return __c.begin(); } template inline _LIBCPP_INLINE_VISIBILITY auto cend(const _Cp& __c) -> decltype(end(__c)) { - return _VSTD::end(__c); + return __c.end(); } template @@ -1560,6 +1516,53 @@ end(const _Cp& __c) #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_TRAILING_RETURN) +template +inline _LIBCPP_INLINE_VISIBILITY +_Tp* +begin(_Tp (&__array)[_Np]) +{ + return __array; +} + +template +inline _LIBCPP_INLINE_VISIBILITY +_Tp* +end(_Tp (&__array)[_Np]) +{ + return __array + _Np; +} + +#if _LIBCPP_STD_VER > 11 +template +inline _LIBCPP_INLINE_VISIBILITY +reverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np]) +{ + return reverse_iterator<_Tp*>(__array + _Np); +} + +template +inline _LIBCPP_INLINE_VISIBILITY +reverse_iterator<_Tp*> rend(_Tp (&__array)[_Np]) +{ + return reverse_iterator<_Tp*>(__array); +} + +template +inline _LIBCPP_INLINE_VISIBILITY +reverse_iterator rbegin(initializer_list<_Ep> __il) +{ + return reverse_iterator(__il.end()); +} + +template +inline _LIBCPP_INLINE_VISIBILITY +reverse_iterator rend(initializer_list<_Ep> __il) +{ + return reverse_iterator(__il.begin()); +} + +#endif + _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP_ITERATOR diff --git a/test/containers/sequences/array/iterators.pass.cpp b/test/containers/sequences/array/iterators.pass.cpp index 3014fd54..8da3803d 100644 --- a/test/containers/sequences/array/iterators.pass.cpp +++ b/test/containers/sequences/array/iterators.pass.cpp @@ -50,20 +50,11 @@ int main() assert ( !(ii1 != ii2 )); assert ( !(ii1 != cii )); - C c; - assert ( c.begin() == std::begin(c)); - assert ( c.cbegin() == std::cbegin(c)); - assert ( c.rbegin() == std::rbegin(c)); - assert ( c.crbegin() == std::crbegin(c)); - assert ( c.end() == std::end(c)); - assert ( c.cend() == std::cend(c)); - assert ( c.rend() == std::rend(c)); - assert ( c.crend() == std::crend(c)); - - assert ( std::begin(c) != std::end(c)); - assert ( std::rbegin(c) != std::rend(c)); - assert ( std::cbegin(c) != std::cend(c)); - assert ( std::crbegin(c) != std::crend(c)); +// C c; +// assert ( ii1 != c.cbegin()); +// assert ( cii != c.begin()); +// assert ( cii != c.cend()); +// assert ( ii1 != c.end()); } { typedef std::array C; @@ -77,20 +68,11 @@ int main() assert ( !(ii1 != ii2 )); assert ( !(ii1 != cii )); - C c; - assert ( c.begin() == std::begin(c)); - assert ( c.cbegin() == std::cbegin(c)); - assert ( c.rbegin() == std::rbegin(c)); - assert ( c.crbegin() == std::crbegin(c)); - assert ( c.end() == std::end(c)); - assert ( c.cend() == std::cend(c)); - assert ( c.rend() == std::rend(c)); - assert ( c.crend() == std::crend(c)); - - assert ( std::begin(c) == std::end(c)); - assert ( std::rbegin(c) == std::rend(c)); - assert ( std::cbegin(c) == std::cend(c)); - assert ( std::crbegin(c) == std::crend(c)); +// C c; +// assert ( ii1 != c.cbegin()); +// assert ( cii != c.begin()); +// assert ( cii != c.cend()); +// assert ( ii1 != c.end()); } } #endif diff --git a/test/iterators/iterator.range/begin-end.pass.cpp b/test/iterators/iterator.range/begin-end.pass.cpp index 65d1a7bd..e8a6c18f 100644 --- a/test/iterators/iterator.range/begin-end.pass.cpp +++ b/test/iterators/iterator.range/begin-end.pass.cpp @@ -52,7 +52,6 @@ void test_const_container( const std::initializer_list & c, T val ) { assert ( std::end(c) == c.end()); #if _LIBCPP_STD_VER > 11 // initializer_list doesn't have cbegin/cend/rbegin/rend -// but std::cbegin(),etc work (b/c they're general fn templates) // assert ( std::cbegin(c) == c.cbegin()); // assert ( std::cbegin(c) != c.cend()); // assert ( std::cend(c) == c.cend());