summaryrefslogtreecommitdiff
path: root/include/iterator
diff options
context:
space:
mode:
Diffstat (limited to 'include/iterator')
-rw-r--r--include/iterator36
1 files changed, 18 insertions, 18 deletions
diff --git a/include/iterator b/include/iterator
index bcf142a6c833..c06ef8f6777d 100644
--- a/include/iterator
+++ b/include/iterator
@@ -214,7 +214,7 @@ public:
typedef traits traits_type;
typedef basic_istream<charT,traits> istream_type;
- istream_iterator();
+ constexpr istream_iterator();
istream_iterator(istream_type& s);
istream_iterator(const istream_iterator& x);
~istream_iterator();
@@ -575,7 +575,7 @@ public:
_LIBCPP_INLINE_VISIBILITY reverse_iterator& operator-=(difference_type __n)
{current += __n; return *this;}
_LIBCPP_INLINE_VISIBILITY reference operator[](difference_type __n) const
- {return current[-__n-1];}
+ {return *(*this + __n);}
};
template <class _Iter1, class _Iter2>
@@ -765,7 +765,7 @@ private:
istream_type* __in_stream_;
_Tp __value_;
public:
- _LIBCPP_INLINE_VISIBILITY istream_iterator() : __in_stream_(0) {}
+ _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR istream_iterator() : __in_stream_(0), __value_() {}
_LIBCPP_INLINE_VISIBILITY istream_iterator(istream_type& __s) : __in_stream_(&__s)
{
if (!(*__in_stream_ >> __value_))
@@ -1241,7 +1241,7 @@ private:
template <class _Up> friend class __wrap_iter;
template <class _CharT, class _Traits, class _Alloc> friend class basic_string;
- template <class _Tp, class _Alloc> friend class vector;
+ template <class _Tp, class _Alloc> friend class _LIBCPP_TYPE_VIS_ONLY vector;
template <class _Iter1, class _Iter2>
friend
@@ -1580,29 +1580,29 @@ end(const _Cp& __c)
#endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_TRAILING_RETURN)
#if _LIBCPP_STD_VER > 14
-template <class _C>
-constexpr auto size(const _C& __c) -> decltype(__c.size()) { return __c.size(); }
+template <class _Cont>
+constexpr auto size(const _Cont& __c) -> decltype(__c.size()) { return __c.size(); }
-template <class _Tp, size_t _N>
-constexpr size_t size(const _Tp (&__array)[_N]) noexcept { return _N; }
+template <class _Tp, size_t _Sz>
+constexpr size_t size(const _Tp (&__array)[_Sz]) noexcept { return _Sz; }
-template <class _C>
-constexpr auto empty(const _C& __c) -> decltype(__c.empty()) { return __c.empty(); }
+template <class _Cont>
+constexpr auto empty(const _Cont& __c) -> decltype(__c.empty()) { return __c.empty(); }
-template <class _Tp, size_t _N>
-constexpr bool empty(const _Tp (&__array)[_N]) noexcept { return false; }
+template <class _Tp, size_t _Sz>
+constexpr bool empty(const _Tp (&__array)[_Sz]) noexcept { return false; }
template <class _Ep>
constexpr bool empty(initializer_list<_Ep> __il) noexcept { return __il.size() == 0; }
-template <class _C> constexpr
-auto data(_C& __c) -> decltype(__c.data()) { return __c.data(); }
+template <class _Cont> constexpr
+auto data(_Cont& __c) -> decltype(__c.data()) { return __c.data(); }
-template <class _C> constexpr
-auto data(const _C& __c) -> decltype(__c.data()) { return __c.data(); }
+template <class _Cont> constexpr
+auto data(const _Cont& __c) -> decltype(__c.data()) { return __c.data(); }
-template <class _Tp, size_t _N>
-constexpr _Tp* data(_Tp (&__array)[_N]) noexcept { return __array; }
+template <class _Tp, size_t _Sz>
+constexpr _Tp* data(_Tp (&__array)[_Sz]) noexcept { return __array; }
template <class _Ep>
constexpr const _Ep* data(initializer_list<_Ep> __il) noexcept { return __il.begin(); }