summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/iterator22
-rw-r--r--libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp3
-rw-r--r--libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp3
3 files changed, 20 insertions, 8 deletions
diff --git a/libcxx/include/iterator b/libcxx/include/iterator
index d163ab1b091..9e1da937d6d 100644
--- a/libcxx/include/iterator
+++ b/libcxx/include/iterator
@@ -604,21 +604,27 @@ distance(_InputIter __first, _InputIter __last)
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;
diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
index e257b3eaaf3..1743349a5f7 100644
--- a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
+++ b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
@@ -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>
diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
index 1eb91881fe1..554445c188d 100644
--- a/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
+++ b/libcxx/test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
@@ -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>
OpenPOWER on IntegriCloud