LLVM: include/llvm/Support/FormatVariadicDetails.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_SUPPORT_FORMATVARIADICDETAILS_H
10#define LLVM_SUPPORT_FORMATVARIADICDETAILS_H
11
16
17#include <type_traits>
18
19namespace llvm {
20template <typename T, typename Enable = void> struct format_provider {};
22
26 virtual void anchor();
27
28protected:
30
31public:
33};
34
36 T Item;
37
38public:
40
44};
45
46template
48 T Item;
49
50public:
52 : Item(std::forward<T>(Item)) {}
53
55};
56
58
59
60
61
62
64public:
68
70
71 static constexpr bool value =
73};
74
75
77public:
78 using ConstRefT = const std::decay_t &;
79
80 template
82 -> std::is_same<decltype(std::declval<llvm::raw_ostream &>()
83 << std::declval()),
85
86 template static auto test(...) -> std::false_type;
87
89};
90
91
92
93template
95 : public std::is_base_of<format_adapter, std::remove_reference_t> {};
96
97
98
99
100template
102 : public std::bool_constant<!uses_format_member::value &&
103 has_FormatProvider::value> {};
104
105
106
107template
109 : public std::bool_constant<!uses_format_member::value &&
110 !uses_format_provider::value &&
111 has_StreamOperator::value> {};
112
113
114
115
116
117template
119 : public std::bool_constant<!uses_format_member::value &&
120 !uses_format_provider::value &&
121 !uses_stream_operator::value> {};
122
123template
124std::enable_if_t<uses_format_member::value, T>
126 return std::forward(Item);
127}
128
129template
130std::enable_if_t<uses_format_provider::value, provider_format_adapter>
134
135template
136std::enable_if_t<uses_stream_operator::value,
137 stream_operator_format_adapter>
139
140
141
142 static_assert(
143 !std::is_same_v<llvm::Error, std::remove_cv_t>,
144 "llvm::Error-by-value must be wrapped in fmt_consume() for formatv");
146}
147
148template
149std::enable_if_t<uses_missing_provider::value, missing_format_adapter>
153}
154}
155}
156
157#endif
Lightweight error class with error context and mandatory checking.
StringRef - Represent a constant reference to a string, i.e.
This class implements an extremely fast bulk output stream that can only output to a stream.
virtual ~format_adapter()=default
virtual void format(raw_ostream &S, StringRef Options)=0
void(*)(const Decayed &, llvm::raw_ostream &, StringRef) Signature_format
Definition FormatVariadicDetails.h:66
static constexpr bool value
Definition FormatVariadicDetails.h:71
SameType< Signature_format, &U::format > check
Definition FormatVariadicDetails.h:69
std::decay_t< T > Decayed
Definition FormatVariadicDetails.h:65
static auto test(int) -> std::is_same< decltype(std::declval< llvm::raw_ostream & >()<< std::declval< U >()), llvm::raw_ostream & >
const std::decay_t< T > & ConstRefT
Definition FormatVariadicDetails.h:78
static auto test(...) -> std::false_type
static constexpr bool value
Definition FormatVariadicDetails.h:88
void format(llvm::raw_ostream &S, StringRef Options) override
Definition FormatVariadicDetails.h:41
provider_format_adapter(T &&Item)
Definition FormatVariadicDetails.h:39
void format(llvm::raw_ostream &S, StringRef) override
Definition FormatVariadicDetails.h:54
stream_operator_format_adapter(T &&Item)
Definition FormatVariadicDetails.h:51
std::enable_if_t< uses_format_member< T >::value, T > build_format_adapter(T &&Item)
Definition FormatVariadicDetails.h:125
This is an optimization pass for GlobalISel generic memory operations.
typename detail::detector< void, Op, Args... >::value_t is_detected
Detects if a given trait holds for some set of arguments 'Args'.
Implement std::hash so that hash_code can be used in STL containers.