Iros
 
Loading...
Searching...
No Matches
core.h
Go to the documentation of this file.
1#pragma once
2
3namespace di::meta {
4template<typename... Types>
5struct List;
6
7template<auto... vs>
8struct ListV {};
9}
10
11namespace di::concepts {
12template<typename T>
13concept Trait = requires { typename T::Type; };
14}
15
16namespace di::meta {
17template<typename T>
19 using Type = T;
20
21 template<typename...>
22 using Invoke = Type;
23};
24
25template<concepts::Trait T>
26using Type = T::Type;
27
31template<typename T>
33
34namespace detail {
35 template<typename T>
37
38 template<typename T>
39 struct RemoveConstHelper<T const> : TypeConstant<T> {};
40}
41
42template<typename T>
44
45namespace detail {
46 template<typename T>
48
49 template<typename T>
50 struct RemoveVolatile<T volatile> : TypeConstant<T> {};
51}
52
53template<typename T>
55
56template<typename T>
58
59namespace detail {
60 template<typename T>
62
63 template<typename T>
65
66 template<typename T>
68}
69
70template<typename T>
72
73template<typename T>
75
76template<auto val, typename T = meta::RemoveCVRef<decltype(val)>>
77struct Constexpr;
78
79namespace detail {
80 template<bool value, typename T, typename U>
82
83 template<typename T, typename U>
84 struct ConditionalHelper<false, T, U> : TypeConstant<U> {};
85}
86
87template<bool value, typename T, typename U>
89}
90
91namespace di::concepts {
97template<typename...>
98concept AlwaysFalse = false;
99
102template<typename...>
103concept AlwaysTrue = true;
104
105namespace detail {
106 template<typename T, typename U>
107 constexpr inline auto same_as_helper = false;
108
109 template<typename T>
110 constexpr inline auto same_as_helper<T, T> = true;
111}
112
113template<typename T, typename U>
115
116template<typename T, typename... Types>
117concept OneOf = (SameAs<T, Types> || ...);
118
119namespace detail {
120 template<typename T>
121 constexpr inline bool language_void_helper = false;
122
123 template<>
124 constexpr inline bool language_void_helper<void> = true;
125}
126
127template<typename T>
129
130namespace detail {
131 template<typename T, template<typename...> typename Template>
132 constexpr inline bool instance_of_helper = false;
133
134 template<typename... Types, template<typename...> typename Template>
135 constexpr inline bool instance_of_helper<Template<Types...>, Template> = true;
136}
137
138template<typename T, template<typename...> typename Template>
140
141namespace detail {
142 template<typename T, template<auto...> typename Template>
143 constexpr inline bool instance_of_v_helper = false;
144
145 template<auto... values, template<auto...> typename Template>
146 constexpr inline bool instance_of_v_helper<Template<values...>, Template> = true;
147}
148
149template<typename T, template<auto...> typename Template>
151
152namespace detail {
153 template<typename T, template<template<typename...> typename...> typename Template>
154 constexpr inline bool instance_of_template_helper = false;
155
156 template<template<typename...> typename... Templates, template<template<typename...> typename...> typename Template>
157 constexpr inline bool instance_of_template_helper<Template<Templates...>, Template> = true;
158}
159
160template<typename T, template<template<typename...> typename...> typename Template>
162
163template<typename T>
165}
166
167namespace di {
168using concepts::SameAs;
169}
This concept is used with static_assert() to cause the static assert to fail only when the template h...
Definition core.h:98
This concept is used with static_assert() to stop compilation if any provided type is not well-formed...
Definition core.h:103
Definition core.h:161
Definition core.h:150
Definition core.h:139
Definition core.h:128
Definition core.h:117
Definition core.h:114
Definition core.h:13
Definition core.h:164
Definition impl.h:7
constexpr auto same_as_helper
Definition core.h:107
constexpr bool instance_of_helper
Definition core.h:132
constexpr bool language_void_helper
Definition core.h:121
constexpr bool instance_of_template_helper
Definition core.h:154
constexpr bool instance_of_v_helper
Definition core.h:143
Definition any_storable.h:9
Definition const_sentinel.h:8
Definition merge_interfaces.h:6
detail::ConditionalHelper< value, T, U >::Type Conditional
Definition core.h:88
Type< TypeConstant< T > > TypeIdentity
This is a helper template to prevent C++ from deducing the type of template argument.
Definition core.h:32
T::Type Type
Definition core.h:26
RemoveCV< RemoveReference< T > > RemoveCVRef
Definition core.h:74
Type< detail::RemoveConstHelper< T > > RemoveConst
Definition core.h:43
Type< detail::RemoveVolatile< T > > RemoveVolatile
Definition core.h:54
Type< detail::RemoveReferenceHelper< T > > RemoveReference
Definition core.h:71
RemoveConst< RemoveVolatile< T > > RemoveCV
Definition core.h:57
Definition zstring_parser.h:9
A wrapper for a constexpr value.
Definition core.h:77
Definition core.h:8
Definition core.h:5
Definition core.h:18
Type Invoke
Definition core.h:22
T Type
Definition core.h:19