tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
indirectly_readable.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2// SPDX-FileCopyrightText: Copyright (C) 2024 Tobias Hienzsch
3
4#ifndef TETL_ITERATOR_INDIRECTLY_READABLE_HPP
5#define TETL_ITERATOR_INDIRECTLY_READABLE_HPP
6
7#include <etl/_concepts/common_reference_with.hpp>
8#include <etl/_concepts/same_as.hpp>
9#include <etl/_iterator/iter_reference_t.hpp>
10#include <etl/_iterator/iter_rvalue_reference_t.hpp>
11#include <etl/_iterator/iter_value_t.hpp>
12#include <etl/_iterator/ranges_iter_move.hpp>
13#include <etl/_type_traits/remove_cvref.hpp>
14
15namespace etl {
16
17namespace detail {
18template <typename In>
19concept indirectly_readable_impl
20 = etl::common_reference_with<etl::iter_reference_t<In>&&, etl::iter_value_t<In>&>
21 and etl::common_reference_with<etl::iter_reference_t<In>&&, etl::iter_rvalue_reference_t<In>&&>
22 and etl::common_reference_with<etl::iter_rvalue_reference_t<In>&&, etl::iter_value_t<In> const&>
23 and requires(In const in) {
24 typename etl::iter_value_t<In>;
25 typename etl::iter_reference_t<In>;
26 typename etl::iter_rvalue_reference_t<In>;
27 { *in } -> etl::same_as<etl::iter_reference_t<In>>;
28 { ranges::iter_move(in) } -> etl::same_as<etl::iter_rvalue_reference_t<In>>;
29 };
30} // namespace detail
31
32template <typename In>
33concept indirectly_readable = etl::detail::indirectly_readable_impl<etl::remove_cvref_t<In>>;
34
35} // namespace etl
36
37#endif // TETL_ITERATOR_INDIRECTLY_READABLE_HPP
constexpr auto iter_move
Definition ranges_iter_move.hpp:63
Definition ranges_in_fun_result.hpp:12
Definition adjacent_find.hpp:9