[PATCH] D34649: Remove addtional parameters in function std::next() and std::prev()
Jason Liu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 26 15:18:06 PDT 2017
jasonliu created this revision.
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.
https://reviews.llvm.org/D34649
Files:
include/iterator
test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
Index: test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
===================================================================
--- test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
+++ test/std/iterators/iterator.primitives/iterator.operations/prev.pass.cpp
@@ -22,6 +22,9 @@
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>
Index: test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
===================================================================
--- test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
+++ test/std/iterators/iterator.primitives/iterator.operations/next.pass.cpp
@@ -24,6 +24,9 @@
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>
Index: include/iterator
===================================================================
--- include/iterator
+++ include/iterator
@@ -604,21 +604,27 @@
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>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX14
-_BidiretionalIter
+typename enable_if
+<
+ __is_bidirectional_iterator<_BidiretionalIter>::value,
+ _BidiretionalIter
+>::type
prev(_BidiretionalIter __x,
- typename iterator_traits<_BidiretionalIter>::difference_type __n = 1,
- typename enable_if<__is_bidirectional_iterator<_BidiretionalIter>::value>::type* = 0)
+ typename iterator_traits<_BidiretionalIter>::difference_type __n = 1)
{
_VSTD::advance(__x, -__n);
return __x;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D34649.104030.patch
Type: text/x-patch
Size: 2356 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170626/84c44674/attachment-0001.bin>
More information about the cfe-commits
mailing list