di
0.1.0
Loading...
Searching...
No Matches
indirectly_readable.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/iterator/iterator_move.h
"
4
#include "
di/container/meta/iterator_reference.h
"
5
#include "
di/container/meta/iterator_rvalue.h
"
6
#include "
di/container/meta/iterator_value.h
"
7
#include "
di/meta/common.h
"
8
#include "
di/meta/core.h
"
9
10
namespace
di::concepts
{
11
namespace
detail {
12
template
<
typename
T>
13
concept
IndirectlyReadableHelper =
14
requires
(T
const
input) {
15
typename
meta::IteratorValue<T>
;
16
typename
meta::IteratorReference<T>
;
17
typename
meta::IteratorRValue<T>
;
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
25
template
<
typename
T>
26
concept
IndirectlyReadable
= detail::IndirectlyReadableHelper<meta::RemoveCVRef<T>>;
27
}
di::concepts::IndirectlyReadable
Definition
indirectly_readable.h:26
core.h
iterator_move.h
iterator_reference.h
iterator_rvalue.h
common.h
iterator_value.h
di::concepts
Definition
any_storable.h:9
di::container::iterator_move
constexpr auto iterator_move
Definition
iterator_move.h:56
di::meta::IteratorRValue
decltype(container::iterator_move(util::declval< T & >())) IteratorRValue
Definition
iterator_rvalue.h:9
di::meta::IteratorValue
meta::Type< decltype(container::iterator_value(types::in_place_type< meta::RemoveCVRef< T > >))> IteratorValue
Definition
iterator_value.h:8
di::meta::IteratorReference
decltype(*util::declval< T const & >()) IteratorReference
Definition
iterator_reference.h:7
di
container
concepts
indirectly_readable.h
Generated by
1.13.2