Iros
 
Loading...
Searching...
No Matches
operations.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/meta/compare.h"
4#include "di/meta/core.h"
5#include "di/meta/language.h"
6#include "di/util/declval.h"
7#include "di/util/forward.h"
8
9namespace di::concepts {
10template<typename T, typename... Args>
11concept ConstructibleFrom = (!LanguageVoid<T>) && requires(Args&&... args) { T(util::forward<Args>(args)...); };
12
13template<typename T, typename U>
14concept WeaklyAssignableFrom = requires(T lhs, U&& value) {
15 { lhs = util::forward<U>(value) } -> SameAs<T>;
16};
17
18template<typename T, typename U>
19concept AssignableFrom = LValueReference<T> && requires(T lvalue, U&& value) {
20 { lvalue = util::forward<U>(value) } -> SameAs<T>;
21};
22
23template<typename T>
25
26template<typename T>
27concept DefaultInitializable = requires {
28 T();
29 T {};
30 (void) ::new T;
31};
32
33template<typename T>
35
36template<typename T>
38
39template<typename T>
41
42template<typename T>
44
45template<typename T>
47
48template<typename T>
50
51namespace detail {
52 template<typename T>
53 concept DestructibleHelper = requires { util::declval<T&>().~T(); };
54}
55
56template<typename T>
59
60namespace detail {
61 template<typename From, typename To>
63
64 template<typename From, typename To>
66
67 template<typename From, typename To>
69
70 template<typename From, typename To>
72}
73
74template<typename From, typename To>
76
88template<typename From, typename To>
90 (LanguageVoid<From> && LanguageVoid<To>) || requires(void (*function_accepting_to)(To), From&& from) {
91 static_cast<To (*)()>(nullptr);
92 { function_accepting_to(util::forward<From>(from)) };
93 };
94
95template<typename From, typename To>
96concept ExplicitlyConvertibleTo = requires { static_cast<To>(util::declval<From>()); };
97
98template<typename From, typename To>
100
107template<typename From, typename To>
112
113template<typename Derived, typename Base>
115
116template<typename T>
118
119template<typename T>
121
122namespace detail {
123 template<typename T>
125}
126
127template<typename T>
128concept BooleanTestable = detail::BooleanTestableImpl<T> && requires(T&& value) {
129 { !util::forward<T>(value) } -> detail::BooleanTestableImpl;
130};
131
132template<typename T>
133concept CanReference = requires { typename meta::TypeConstant<T&>; };
134
135template<typename T>
136concept Dereferenceable = requires(T& it) {
137 { *it } -> CanReference;
138};
139}
140
141namespace di {
143}
Definition operations.h:19
Definition language.h:373
Definition operations.h:128
Definition operations.h:133
Definition operations.h:11
This concept requires that the conversion from From to To would not result in converting a derived ty...
Definition operations.h:108
Definition operations.h:99
Definition operations.h:37
Definition operations.h:34
Definition operations.h:40
Definition operations.h:24
Definition operations.h:27
Definition operations.h:136
Definition operations.h:114
Definition operations.h:57
Definition compare.h:82
Definition operations.h:96
Implicit conversion for this test refers to the ability to return a value of function from a type.
Definition operations.h:89
Definition language.h:30
Definition language.h:64
Definition core.h:128
Definition operations.h:49
Definition operations.h:46
Definition operations.h:43
Definition language.h:61
Definition language.h:50
Definition operations.h:120
Definition core.h:114
Definition operations.h:117
Definition language.h:107
Definition operations.h:14
Definition impl.h:7
constexpr bool qualification_convertible_to
Definition operations.h:62
Definition any_storable.h:9
Type< detail::RemovePointerHelper< T > > RemovePointer
Definition language.h:491
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Definition zstring_parser.h:9
@ T
Definition key.h:29
Definition core.h:18