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
3#ifndef TETL_ITERATOR_INDIRECTLY_READABLE_HPP
4#define TETL_ITERATOR_INDIRECTLY_READABLE_HPP
5
13
14namespace etl {
15
16namespace detail {
17template <typename In>
18concept indirectly_readable_impl
19 = etl::common_reference_with<etl::iter_reference_t<In>&&, etl::iter_value_t<In>&>
20 and etl::common_reference_with<etl::iter_reference_t<In>&&, etl::iter_rvalue_reference_t<In>&&>
21 and etl::common_reference_with<etl::iter_rvalue_reference_t<In>&&, etl::iter_value_t<In> const&>
22 and requires(In const in) {
23 typename etl::iter_value_t<In>;
26 { *in } -> etl::same_as<etl::iter_reference_t<In>>;
27 { ranges::iter_move(in) } -> etl::same_as<etl::iter_rvalue_reference_t<In>>;
28 };
29} // namespace detail
30
31template <typename In>
32concept indirectly_readable = etl::detail::indirectly_readable_impl<etl::remove_cvref_t<In>>;
33
34} // namespace etl
35
36#endif // TETL_ITERATOR_INDIRECTLY_READABLE_HPP
Definition indirectly_readable.hpp:32
constexpr auto iter_move
Definition ranges_iter_move.hpp:62
Definition adjacent_find.hpp:8
decltype(etl::ranges::iter_move(etl::declval< T & >())) iter_rvalue_reference_t
Definition iter_rvalue_reference_t.hpp:14
decltype(*etl::declval< T & >()) iter_reference_t
Definition iter_reference_t.hpp:12
typename detail::iter_value< T >::type iter_value_t
Definition iter_value_t.hpp:29