end() const noexcept
{ return data() + 1; }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4035. single_view should provide empty
+ static constexpr bool
+ empty() noexcept
+ { return false; }
+
static constexpr size_t
size() noexcept
{ return 1; }
end() const requires same_as<_Winc, _Bound>
{ return _Iterator{_M_bound}; }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4001. iota_view should provide empty
+ constexpr bool
+ empty() const
+ { return _M_value == _M_bound; }
+
constexpr auto
size() const
requires (same_as<_Winc, _Bound> && __detail::__advanceable<_Winc>)
private:
_OuterIter _M_i = _OuterIter();
- public:
- value_type() = default;
-
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4013. lazy_split_view::outer-iterator::value_type should not
+ // provide default constructor
constexpr explicit
value_type(_OuterIter __i)
: _M_i(std::move(__i))
{ }
+ friend _OuterIter;
+
+ public:
constexpr _InnerIter<_Const>
begin() const
{ return _InnerIter<_Const>{_M_i}; }
base() &&
{ return std::move(_M_base); }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4012. common_view::begin/end are missing the simple-view check
constexpr auto
- begin()
+ begin() requires (!__detail::__simple_view<_Vp>)
{
if constexpr (random_access_range<_Vp> && sized_range<_Vp>)
return ranges::begin(_M_base);
}
constexpr auto
- end()
+ end() requires (!__detail::__simple_view<_Vp>)
{
if constexpr (random_access_range<_Vp> && sized_range<_Vp>)
return ranges::begin(_M_base) + ranges::size(_M_base);
: _M_base(std::move(__base))
{ }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3848. adjacent_view, adjacent_transform_view and slide_view missing base accessor
+ constexpr _Vp
+ base() const & requires copy_constructible<_Vp>
+ { return _M_base; }
+
+ constexpr _Vp
+ base() &&
+ { return std::move(_M_base); }
+
constexpr auto
begin() requires (!__detail::__simple_view<_Vp>)
{ return _Iterator<false>(ranges::begin(_M_base), ranges::end(_M_base)); }
: _M_fun(std::move(__fun)), _M_inner(std::move(__base))
{ }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3848. adjacent_view, adjacent_transform_view and slide_view missing base accessor
+ // 3947. Unexpected constraints on adjacent_transform_view::base()
+ constexpr _Vp
+ base() const & requires copy_constructible<_Vp>
+ { return _M_inner.base(); }
+
+ constexpr _Vp
+ base() &&
+ { return std::move(_M_inner.base()); }
+
constexpr auto
begin()
{ return _Iterator<false>(*this, _M_inner.begin()); }
operator-(const _InnerIter& __x, default_sentinel_t __y)
requires sized_sentinel_for<sentinel_t<_Vp>, iterator_t<_Vp>>
{ return -(__y - __x); }
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3851. chunk_view::inner-iterator missing custom iter_move and iter_swap
+ friend constexpr range_rvalue_reference_t<_Vp>
+ iter_move(const _InnerIter& __i)
+ noexcept(noexcept(ranges::iter_move(*__i._M_parent->_M_current)))
+ { return ranges::iter_move(*__i._M_parent->_M_current); }
+
+ friend constexpr void
+ iter_swap(const _InnerIter& __x, const _InnerIter& __y)
+ noexcept(noexcept(ranges::iter_swap(*__x._M_parent->_M_current,
+ *__x._M_parent->_M_current)))
+ requires indirectly_swappable<iterator_t<_Vp>>
+ { return ranges::iter_swap(*__x._M_parent->_M_current, *__y._M_parent->_M_current); }
};
template<view _Vp>
: _M_base(std::move(__base)), _M_n(__n)
{ __glibcxx_assert(__n > 0); }
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3848. adjacent_view, adjacent_transform_view and slide_view missing base accessor
+ constexpr _Vp
+ base() const & requires copy_constructible<_Vp>
+ { return _M_base; }
+
+ constexpr _Vp
+ base() &&
+ { return std::move(_M_base); }
+
constexpr auto
begin() requires (!(__detail::__simple_view<_Vp>
&& __detail::__slide_caches_nothing<const _Vp>))
{ return __detail::__to_unsigned_like(_M_bound); }
};
- template<typename _Tp, typename _Bound>
- repeat_view(_Tp, _Bound) -> repeat_view<_Tp, _Bound>;
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4053. Unary call to std::views::repeat does not decay the argument
+ template<typename _Tp, typename _Bound = unreachable_sentinel_t>
+ repeat_view(_Tp, _Bound = _Bound()) -> repeat_view<_Tp, _Bound>;
template<move_constructible _Tp, semiregular _Bound>
requires is_object_v<_Tp> && same_as<_Tp, remove_cv_t<_Tp>>
requires __detail::__can_repeat_view<_Tp>
constexpr auto
operator() [[nodiscard]] (_Tp&& __value) const
- { return repeat_view(std::forward<_Tp>(__value)); }
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4054. Repeating a repeat_view should repeat the view
+ return repeat_view<decay_t<_Tp>>(std::forward<_Tp>(__value));
+ }
template<typename _Tp, typename _Bound>
requires __detail::__can_bounded_repeat_view<_Tp, _Bound>