Implement LWG#2353: std::next is over-constrained

llvm-svn: 252407
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: e5f1288fa0870291aeba423d8967efa0ffe2236e
diff --git a/include/iterator b/include/iterator
index c06ef8f..8dd6bd5 100644
--- a/include/iterator
+++ b/include/iterator
@@ -513,12 +513,12 @@
     return __distance(__first, __last, typename iterator_traits<_InputIter>::iterator_category());
 }
 
-template <class _ForwardIter>
+template <class _InputIter>
 inline _LIBCPP_INLINE_VISIBILITY
-_ForwardIter
-next(_ForwardIter __x,
-     typename iterator_traits<_ForwardIter>::difference_type __n = 1,
-     typename enable_if<__is_forward_iterator<_ForwardIter>::value>::type* = 0)
+_InputIter
+next(_InputIter __x,
+     typename iterator_traits<_InputIter>::difference_type __n = 1,
+     typename enable_if<__is_input_iterator<_InputIter>::value>::type* = 0)
 {
     _VSTD::advance(__x, __n);
     return __x;