di 0.1.0
Loading...
Searching...
No Matches
indirectly_readable.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/meta/common.h"
8#include "di/meta/core.h"
9
10namespace di::concepts {
11namespace detail {
12 template<typename T>
13 concept IndirectlyReadableHelper =
14 requires(T const input) {
18 { *input } -> SameAs<meta::IteratorReference<T>>;
19 { container::iterator_move(input) } -> SameAs<meta::IteratorRValue<T>>;
20 } && concepts::CommonReferenceWith<meta::IteratorReference<T>&&, meta::IteratorValue<T>&> &&
21 concepts::CommonReferenceWith<meta::IteratorReference<T>&&, meta::IteratorRValue<T>&&> &&
22 concepts::CommonReferenceWith<meta::IteratorRValue<T>&&, meta::IteratorValue<T> const&>;
23}
24
25template<typename T>
26concept IndirectlyReadable = detail::IndirectlyReadableHelper<meta::RemoveCVRef<T>>;
27}
Definition indirectly_readable.h:26
Definition any_storable.h:9
constexpr auto iterator_move
Definition iterator_move.h:56
decltype(container::iterator_move(util::declval< T & >())) IteratorRValue
Definition iterator_rvalue.h:9
meta::Type< decltype(container::iterator_value(types::in_place_type< meta::RemoveCVRef< T > >))> IteratorValue
Definition iterator_value.h:8
decltype(*util::declval< T const & >()) IteratorReference
Definition iterator_reference.h:7