3#ifndef TETL_RANGES_BEGIN_HPP
4#define TETL_RANGES_BEGIN_HPP
14auto begin(
auto&) ->
void =
delete;
15auto begin(
auto const&) ->
void =
delete;
18concept has_member_begin = ranges::detail::can_borrow<T> and
requires(T&& t) {
19 {
decay_copy(t.begin()) } -> input_or_output_iterator;
23concept has_adl_begin = not has_member_begin<T> and ranges::detail::can_borrow<T> and
requires(T&& t) {
29 requires(
sizeof(T) >= 0)
30 [[nodiscard]]
constexpr auto operator()(T (&t)[])
const noexcept
35 template <
typename T, etl::
size_t Size>
36 requires(
sizeof(T) >= 0)
37 [[nodiscard]]
constexpr auto operator()(T (&t)[Size])
const noexcept
42 template <has_member_begin T>
43 [[nodiscard]]
constexpr auto operator()(T&& t)
const noexcept(
noexcept(
decay_copy(t.begin())))
48 template <has_adl_begin T>
49 [[nodiscard]]
constexpr auto operator()(T&& t)
const noexcept(
noexcept(
decay_copy(
begin(t))))
54 auto operator()(
auto&&) const ->
void = delete;
61inline constexpr auto begin = begin_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 begin
Definition begin.hpp:61
Definition ranges_in_fun_result.hpp:11