using std::ranges::__detail::__maybe_borrowed_range;
using std::__detail::__range_iter_t;
- struct _Begin
+ struct _Begin final
{
private:
template<typename _Tp>
return noexcept(__decay_copy(begin(std::declval<_Tp&>())));
}
+ void operator&() const = delete;
+
public:
template<__maybe_borrowed_range _Tp>
requires is_array_v<remove_reference_t<_Tp>> || __member_begin<_Tp>
{ __decay_copy(end(__t)) } -> sentinel_for<__range_iter_t<_Tp>>;
};
- struct _End
+ struct _End final
{
private:
template<typename _Tp>
return noexcept(__decay_copy(end(std::declval<_Tp&>())));
}
+ void operator&() const = delete;
+
public:
template<__maybe_borrowed_range _Tp>
requires is_bounded_array_v<remove_reference_t<_Tp>>
return static_cast<const _Tp&&>(__t);
}
- struct _CBegin
+ struct _CBegin final
{
template<typename _Tp>
constexpr auto
{
return _Begin{}(__cust_access::__as_const<_Tp>(__e));
}
+
+ void operator&() const = delete;
};
- struct _CEnd
+ struct _CEnd final
{
template<typename _Tp>
constexpr auto
{
return _End{}(__cust_access::__as_const<_Tp>(__e));
}
+
+ void operator&() const = delete;
};
template<typename _Tp>
{ _End{}(__t) } -> same_as<decltype(_Begin{}(__t))>;
};
- struct _RBegin
+ struct _RBegin final
{
private:
template<typename _Tp>
}
}
+ void operator&() const = delete;
+
public:
template<__maybe_borrowed_range _Tp>
requires __member_rbegin<_Tp> || __adl_rbegin<_Tp> || __reversable<_Tp>
-> sentinel_for<decltype(_RBegin{}(std::forward<_Tp>(__t)))>;
};
- struct _REnd
+ struct _REnd final
{
private:
template<typename _Tp>
}
}
+ void operator&() const = delete;
+
public:
template<__maybe_borrowed_range _Tp>
requires __member_rend<_Tp> || __adl_rend<_Tp> || __reversable<_Tp>
}
};
- struct _CRBegin
+ struct _CRBegin final
{
template<typename _Tp>
constexpr auto
{
return _RBegin{}(__cust_access::__as_const<_Tp>(__e));
}
+
+ void operator&() const = delete;
};
- struct _CREnd
+ struct _CREnd final
{
template<typename _Tp>
constexpr auto
{
return _REnd{}(__cust_access::__as_const<_Tp>(__e));
}
+
+ void operator&() const = delete;
};
template<typename _Tp>
__detail::__to_unsigned_like(_End{}(__t) - _Begin{}(__t));
};
- struct _Size
+ struct _Size final
{
private:
template<typename _Tp>
- _Begin{}(std::declval<_Tp&>()));
}
+ void operator&() const = delete;
+
public:
template<typename _Tp>
requires is_bounded_array_v<remove_reference_t<_Tp>>
}
};
- struct _SSize
+ struct _SSize final
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 3403. Domain of ranges::ssize(E) doesn't match ranges::size(E)
else // Must be one of __max_diff_type or __max_size_type.
return __detail::__max_diff_type(__size);
}
+
+ void operator&() const = delete;
};
template<typename _Tp>
bool(_Begin{}(__t) == _End{}(__t));
};
- struct _Empty
+ struct _Empty final
{
private:
template<typename _Tp>
== _End{}(std::declval<_Tp&>())));
}
+ void operator&() const = delete;
+
public:
template<typename _Tp>
requires __member_empty<_Tp> || __size0_empty<_Tp>
template<typename _Tp>
concept __begin_data = contiguous_iterator<__range_iter_t<_Tp>>;
- struct _Data
+ struct _Data final
{
private:
template<typename _Tp>
return noexcept(_Begin{}(std::declval<_Tp&>()));
}
+ void operator&() const = delete;
+
public:
template<__maybe_borrowed_range _Tp>
requires __member_data<_Tp> || __begin_data<_Tp>
}
};
- struct _CData
+ struct _CData final
{
template<typename _Tp>
constexpr auto
{
return _Data{}(__cust_access::__as_const<_Tp>(__e));
}
+
+ void operator&() const = delete;
};
} // namespace __cust_access
// [range.iter.ops] range iterator operations
- struct __advance_fn
+ struct __advance_fn final
{
template<input_or_output_iterator _It>
constexpr void
return __n;
}
}
+
+ void operator&() const = delete;
};
inline constexpr __advance_fn advance{};
- struct __distance_fn
+ struct __distance_fn final
{
template<input_or_output_iterator _It, sentinel_for<_It> _Sent>
constexpr iter_difference_t<_It>
else
return (*this)(ranges::begin(__r), ranges::end(__r));
}
+
+ void operator&() const = delete;
};
inline constexpr __distance_fn distance{};
- struct __next_fn
+ struct __next_fn final
{
template<input_or_output_iterator _It>
constexpr _It
ranges::advance(__x, __n, __bound);
return __x;
}
+
+ void operator&() const = delete;
};
inline constexpr __next_fn next{};
- struct __prev_fn
+ struct __prev_fn final
{
template<bidirectional_iterator _It>
constexpr _It
ranges::advance(__x, -__n, __bound);
return __x;
}
+
+ void operator&() const = delete;
};
inline constexpr __prev_fn prev{};
{
constexpr const bool* disable_sized_range
= &std::ranges::disable_sized_range<void>;
- constexpr auto* begin = &std::ranges::begin;
- constexpr auto* end = &std::ranges::end;
- constexpr auto* cbegin = &std::ranges::cbegin;
- constexpr auto* cend = &std::ranges::cend;
- constexpr auto* rbegin = &std::ranges::rbegin;
- constexpr auto* rend = &std::ranges::rend;
- constexpr auto* crbegin = &std::ranges::crbegin;
- constexpr auto* crend = &std::ranges::crend;
+ using std::ranges::begin;
+ using std::ranges::end;
+ using std::ranges::cbegin;
+ using std::ranges::cend;
+ using std::ranges::rbegin;
+ using std::ranges::rend;
+ using std::ranges::crbegin;
+ using std::ranges::crend;
+ using std::ranges::size;
+ using std::ranges::ssize;
+ using std::ranges::empty;
+ using std::ranges::data;
+ using std::ranges::cdata;
+
+ using std::ranges::advance;
+ using std::ranges::distance;
+ using std::ranges::next;
+ using std::ranges::prev;
}