[libcxx] r308932 - Remove addtional parameters in function std::next() and std::prev()

Rachel Craik via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 24 15:17:05 PDT 2017


Author: rcraik
Date: Mon Jul 24 15:17:05 2017
New Revision: 308932

URL: http://llvm.org/viewvc/llvm-project?rev=308932&view=rev
Log:
Remove addtional parameters in function std::next() and std::prev()

Creating a function pointer with proper parameters pointing to std::next() or std::prev() should work.
This change moves the invented paramater for enable_if over to the return type to resolve this QoI issue.

Patch by Jason Liu.

Differential Revision: https://reviews.llvm.org/D34649

Modified:
    libcxx/trunk/include/iterator
    libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
    libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp

Modified: libcxx/trunk/include/iterator
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iterator?rev=308932&r1=308931&r2=308932&view=diff
==============================================================================
--- libcxx/trunk/include/iterator (original)
+++ libcxx/trunk/include/iterator Mon Jul 24 15:17:05 2017
@@ -604,21 +604,27 @@ distance(_InputIter __first, _InputIter
 
 template <class _InputIter>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-_InputIter
+typename enable_if
+<
+    __is_input_iterator<_InputIter>::value, 
+    _InputIter
+>::type
 next(_InputIter __x,
-     typename iterator_traits<_InputIter>::difference_type __n = 1,
-     typename enable_if<__is_input_iterator<_InputIter>::value>::type* = 0)
+     typename iterator_traits<_InputIter>::difference_type __n = 1)
 {
     _VSTD::advance(__x, __n);
     return __x;
 }
 
-template <class _BidiretionalIter>
+template <class _BidirectionalIter>
 inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-_BidiretionalIter
-prev(_BidiretionalIter __x,
-     typename iterator_traits<_BidiretionalIter>::difference_type __n = 1,
-     typename enable_if<__is_bidirectional_iterator<_BidiretionalIter>::value>::type* = 0)
+typename enable_if
+<
+    __is_bidirectional_iterator<_BidirectionalIter>::value, 
+    _BidirectionalIter
+>::type
+prev(_BidirectionalIter __x,
+     typename iterator_traits<_BidirectionalIter>::difference_type __n = 1)
 {
     _VSTD::advance(__x, -__n);
     return __x;

Modified: libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp?rev=308932&r1=308931&r2=308932&view=diff
==============================================================================
--- libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp (original)
+++ libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp Mon Jul 24 15:17:05 2017
@@ -24,6 +24,9 @@ void
 test(It i, typename std::iterator_traits<It>::difference_type n, It x)
 {
     assert(std::next(i, n) == x);
+
+    It (*next)(It, typename std::iterator_traits<It>::difference_type) = std::next;
+    assert(next(i, n) == x);
 }
 
 template <class It>

Modified: libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp?rev=308932&r1=308931&r2=308932&view=diff
==============================================================================
--- libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp (original)
+++ libcxx/trunk/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp Mon Jul 24 15:17:05 2017
@@ -22,6 +22,9 @@ void
 test(It i, typename std::iterator_traits<It>::difference_type n, It x)
 {
     assert(std::prev(i, n) == x);
+
+    It (*prev)(It, typename std::iterator_traits<It>::difference_type) = std::prev;
+    assert(prev(i, n) == x);
 }
 
 template <class It>




More information about the cfe-commits mailing list