Iros
Loading...
Searching...
No Matches
into_parser_context.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/function/tag_invoke.h
"
4
#include "
di/parser/concepts/parser_context.h
"
5
6
namespace
di::parser
{
7
namespace
detail
{
8
struct
IntoParseContextFunction
{
9
template
<
typename
T>
10
requires
(
concepts::TagInvocable<IntoParseContextFunction, T>
||
concepts::ParserContext<T>
)
11
constexpr
auto
operator
()(T&& value)
const
->
concepts::ParserContext
decltype
(
auto
) {
12
if
constexpr
(
concepts::TagInvocable<IntoParseContextFunction, T>
) {
13
return
function::tag_invoke
(*
this
, util::forward<T>(value));
14
}
else
{
15
return
util::forward<T>(value);
16
}
17
}
18
};
19
}
20
21
constexpr
inline
auto
into_parser_context
=
detail::IntoParseContextFunction
{};
22
}
23
24
namespace
di::concepts
{
25
template
<
typename
T>
26
concept
IntoParserContext
=
requires
(T&& value) {
parser::into_parser_context
(util::forward<T>(value)); };
27
}
28
29
namespace
di::meta
{
30
template
<concepts::IntoParserContext T>
31
using
AsParserContext
=
decltype
(
parser::into_parser_context
(
util::declval<T>
()));
32
}
di::concepts::IntoParserContext
Definition
into_parser_context.h:26
di::concepts::ParserContext
Definition
parser_context.h:12
di::concepts::TagInvocable
Definition
tag_invoke.h:33
di::concepts
Definition
any_storable.h:9
di::function::tag_invoke_ns::tag_invoke
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition
tag_invoke.h:22
di::meta
Definition
merge_interfaces.h:6
di::meta::AsParserContext
decltype(parser::into_parser_context(util::declval< T >())) AsParserContext
Definition
into_parser_context.h:31
di::parser::detail
Definition
zstring_parser.h:10
di::parser
Definition
zstring_parser.h:9
di::parser::into_parser_context
constexpr auto into_parser_context
Definition
into_parser_context.h:21
di::util::declval
auto declval() -> meta::AddRValueReference< T >
Definition
declval.h:8
parser_context.h
di::parser::detail::IntoParseContextFunction
Definition
into_parser_context.h:8
tag_invoke.h
libs
di
include
di
parser
into_parser_context.h
Generated by
1.13.0