typename incrementable_traits<_Iter>::difference_type>;
};
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3798. Rvalue reference and iterator_category
template<typename _Iter>
concept __cpp17_fwd_iterator = __cpp17_input_iterator<_Iter>
&& constructible_from<_Iter>
- && is_lvalue_reference_v<iter_reference_t<_Iter>>
+ && is_reference_v<iter_reference_t<_Iter>>
&& same_as<remove_cvref_t<iter_reference_t<_Iter>>,
typename indirectly_readable_traits<_Iter>::value_type>
&& requires(_Iter __it)
using _Base = transform_view::_Base<_Const>;
using _Res = invoke_result_t<__maybe_const_t<_Const, _Fp>&,
range_reference_t<_Base>>;
- if constexpr (is_lvalue_reference_v<_Res>)
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3798. Rvalue reference and iterator_category
+ if constexpr (is_reference_v<_Res>)
{
using _Cat
= typename iterator_traits<iterator_t<_Base>>::iterator_category;
using __detail::__range_iter_cat;
using _Res = invoke_result_t<__maybe_const_t<_Const, _Fp>&,
range_reference_t<__maybe_const_t<_Const, _Vs>>...>;
- if constexpr (!is_lvalue_reference_v<_Res>)
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3798. Rvalue reference and iterator_category
+ if constexpr (!is_reference_v<_Res>)
return input_iterator_tag{};
else if constexpr ((derived_from<__range_iter_cat<_Vs, _Const>,
random_access_iterator_tag> && ...))
using _Res = invoke_result_t<__unarize<__maybe_const_t<_Const, _Fp>&, _Nm>,
range_reference_t<_Base>>;
using _Cat = typename iterator_traits<iterator_t<_Base>>::iterator_category;
- if constexpr (!is_lvalue_reference_v<_Res>)
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3798. Rvalue reference and iterator_category
+ if constexpr (!is_reference_v<_Res>)
return input_iterator_tag{};
else if constexpr (derived_from<_Cat, random_access_iterator_tag>)
return random_access_iterator_tag{};
using _OuterCat = typename iterator_traits<_OuterIter>::iterator_category;
using _InnerCat = typename iterator_traits<_InnerIter>::iterator_category;
using _PatternCat = typename iterator_traits<_PatternIter>::iterator_category;
- if constexpr (!is_lvalue_reference_v<common_reference_t<iter_reference_t<_InnerIter>,
- iter_reference_t<_PatternIter>>>)
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 3798. Rvalue reference and iterator_category
+ if constexpr (!is_reference_v<common_reference_t<iter_reference_t<_InnerIter>,
+ iter_reference_t<_PatternIter>>>)
return input_iterator_tag{};
else if constexpr (derived_from<_OuterCat, bidirectional_iterator_tag>
&& derived_from<_InnerCat, bidirectional_iterator_tag>