3#ifndef TETL_RANGES_END_HPP
4#define TETL_RANGES_END_HPP
16auto end(
auto&) ->
void =
delete;
17auto end(
auto const&) ->
void =
delete;
20concept has_member_end = ranges::detail::can_borrow<T> and
requires(T&& t) {
21 {
decay_copy(t.end()) } -> etl::sentinel_for<etl::ranges::iterator_t<T>>;
25concept has_adl_end = not has_member_end<T> and ranges::detail::can_borrow<T> and
requires(T&& t) {
26 {
decay_copy(
end(t)) } -> etl::sentinel_for<etl::ranges::iterator_t<T>>;
30 template <
typename T, etl::
size_t Size>
31 requires(
sizeof(T) >= 0)
32 [[nodiscard]]
constexpr auto operator()(T (&t)[Size])
const noexcept
37 template <has_member_end T>
38 [[nodiscard]]
constexpr auto operator()(T&& t)
const noexcept(
noexcept(
decay_copy(t.end())))
43 template <has_adl_end T>
44 [[nodiscard]]
constexpr auto operator()(T&& t)
const noexcept(
noexcept(
decay_copy(
end(t))))
49 auto operator()(
auto&&) const ->
void = delete;
56inline constexpr auto end = end_cpo::fn{};
constexpr auto decay_copy(T &&t) noexcept(is_nothrow_convertible_v< T, decay_t< T > >) -> decay_t< T >
Definition decay_copy.hpp:14
constexpr auto end
Definition end.hpp:56
Definition ranges_in_fun_result.hpp:11