Iros
 
Loading...
Searching...
No Matches
reflect.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/algorithm.h"
5#include "di/meta/core.h"
6#include "di/reflect/atom.h"
8#include "di/reflect/field.h"
9#include "di/types/prelude.h"
11
12namespace di::concepts {
13template<typename T>
16}
17
18namespace di::reflection {
19namespace detail {
21 template<typename T, typename U = meta::RemoveCVRef<T>>
23 constexpr auto operator()(InPlaceType<T>) const -> decltype(auto) {
25 static_assert(concepts::ReflectionValue<R>, "Reflect function must return fields or an atom");
27 }
28
29 template<typename T, typename U = meta::RemoveCVRef<T>>
33 constexpr auto operator()(InPlaceType<T>) const -> decltype(auto) {
34 return Atom<U> {};
35 }
36
37 template<typename T, typename U = meta::RemoveCVRef<T>>
40 constexpr auto operator()(T&&) const -> decltype(auto) {
41 return (*this)(in_place_type<U>);
42 }
43 };
44}
45
46constexpr inline auto reflect = detail::ReflectFunction {};
47}
48
49namespace di::concepts {
50template<typename T>
51concept Reflectable = requires {
53};
54
55template<typename T>
59
60template<typename T>
64
65template<typename T>
69}
70
71namespace di::meta {
72template<concepts::Reflectable T>
74}
75
76namespace di {
81using meta::Reflect;
83}
Definition container.h:8
Definition core.h:139
Definition language.h:215
Definition reflect.h:56
Definition reflect.h:61
Definition reflect.h:51
Definition reflect.h:14
Definition core.h:114
Definition tag_invoke.h:33
Definition constant_string.h:8
Definition impl.h:7
Definition any_storable.h:9
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition merge_interfaces.h:6
decltype(reflection::reflect(in_place_type< T >)) Reflect
Definition reflect.h:73
decltype(di::function::tag_invoke(util::declval< Tag >(), util::declval< Args >()...)) TagInvokeResult
Definition tag_invoke.h:40
Definition atom.h:8
constexpr auto reflect
Definition reflect.h:46
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Definition zstring_parser.h:9
constexpr auto in_place_type
Definition in_place_type.h:12
Definition atom.h:10
Definition in_place_type.h:5