6#pragma push_macro("_LIBCPP_REMOVE_TRANSITIVE_INCLUDES")
7#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES
8#define _LIBCPP_REMOVE_TRANSITIVE_INCLUDES
54template <
typename... Ts>
76template <
unsigned N,
unsigned... Is>
79template <
unsigned... Is>
84template <
typename Test,
template <
typename...>
class Ref>
87template <
template <
typename...>
class Ref,
typename... Args>
93template <
typename S,
typename T>
96template <
typename S,
typename T,
typename =
void>
99template <
typename S,
typename T>
108 decltype(std::declval<const T&>().end()),
109 decltype(*std::declval<
decltype(std::declval<const T&>().begin())&>()),
110 decltype(++std::declval<decltype(std::declval<const T&>().begin())&>()),
111 decltype(std::declval<const T&>().begin() != std::declval<const T&>().end()),
112 decltype(std::declval<const T&>().begin() == std::declval<const T&>().end())>;
114template <
typename T,
typename =
void>
124 decltype(std::declval<T>().find(std::declval<typename T::key_type>())),
125 decltype(std::declval<T>().insert(std::declval<typename T::value_type>()))>;
127template <
typename T,
typename =
void>
134template <
typename T,
typename =
void>
139 decltype(std::declval<const T&>().data()),
140 decltype(std::declval<const T&>().size())>>
141 : std::integral_constant<bool,
142 std::is_same<typename T::traits_type::char_type, char>::value &&
143 std::is_convertible<decltype(std::declval<const T&>().data()), const char*>::value &&
144 std::is_convertible<decltype(std::declval<const T&>().size()), std::size_t>::value> {};
150 is_string_like<T>::value ||
151 (std::is_convertible<const T&, const char*>::value && !std::is_same<T, std::nullptr_t>::value)> {};
153template <
typename T,
typename =
void>
158 decltype(std::declval<const T&>().imag())>>
159 : std::integral_constant<bool,
160 std::is_arithmetic<decltype(std::declval<const T&>().real())>::value &&
161 std::is_arithmetic<decltype(std::declval<const T&>().imag())>::value> {};
163template <
typename T,
typename =
void>
168 : std::is_convertible<decltype(std::declval<const T&>().get()), const void*> {};
170template <
typename T,
typename =
void>
179template <std::
size_t I>
181template <std::
size_t I,
typename T>
182auto tuple_get(T&& value) ->
decltype(get<I>(std::forward<T>(value))) {
183 return get<I>(std::forward<T>(value));
186template <
typename T,
typename Sequence,
typename =
void>
189template <
typename T,
unsigned... I>
193template <
typename T,
typename =
void>
198 :
has_tuple_get<T, typename gen_seq<std::tuple_size<T>::value>::type> {};
201template <
typename T,
typename =
void>
208template <
typename T,
typename =
void>
215 bool = std::is_pointer<
216 typename std::remove_cv<typename std::remove_reference<T>::type>::type>::value>
222 typename std::remove_cv<typename std::remove_reference<T>::type>::type>::type> {};
229template <
typename T,
typename =
void>
235 T().begin(), T().end(), T().size(),
240 T().insert(T().end(),
std::declval<typename T::value_type>()),
241 T().erase(T().begin()), (void)0)>> : std::true_type {};
249 decltype((*std::declval<const T&>().begin()).second)>;
251template <
typename T,
typename =
void>
257template <
typename T,
typename V =
void>
273using is_not_array =
typename std::enable_if<!std::is_array<T>::value>::type;
290 template <
typename T,
typename F>
291 static void visit(T& tup,
size_t idx, F&& fun) {
293 fun(tuple_get<I - 1>(tup));
301 template <
typename T,
typename F>
302 static void visit(T&,
size_t, F&&) {}
305template <
typename F,
typename T>
308 tup, idx, std::forward<F>(fun));
313 template <
typename T1,
typename T2,
typename F>
314 static void visit(T1& tup1, T2& tup2,
size_t idx, F&& fun) {
316 fun(tuple_get<I - 1>(tup1), tuple_get<I - 1>(tup2));
324 template <
typename T1,
typename T2,
typename F>
325 static void visit(T1&, T2&,
size_t, F&&) {}
328template <
typename F,
typename T1,
typename T2>
329void visit2_at(T1& tup1, T2& tup2,
size_t idx, F&& fun) {
331 tup1, tup2, idx, std::forward<F>(fun));
334#define ZEROERR_ENABLE_IF(x) \
335 template <typename T> \
336 typename std::enable_if<x, void>::type
337#define ZEROERR_IS_INT std::is_integral<T>::value
338#define ZEROERR_IS_FLOAT std::is_floating_point<T>::value
339#define ZEROERR_IS_ENUM std::is_enum<T>::value
340#define ZEROERR_IS_CONTAINER detail::is_container<T>::value
341#define ZEROERR_IS_STRING detail::is_string<T>::value
342#define ZEROERR_IS_POINTER (std::is_pointer<T>::value || std::is_same<T, std::nullptr_t>::value)
343#define ZEROERR_IS_CHAR std::is_same<T, char>::value
344#define ZEROERR_IS_WCHAR std::is_same<T, wchar_t>::value
345#define ZEROERR_IS_CLASS std::is_class<T>::value
346#define ZEROERR_IS_STREAMABLE detail::is_streamable<zeroerr::StringBuffer, T>::value
347#define ZEROERR_IS_ARRAY detail::is_array<T>::value
348#define ZEROERR_IS_COMPLEX detail::is_complex<T>::value
349#define ZEROERR_IS_BOOL std::is_same<T, bool>::value
350#define ZEROERR_IS_AUTOPTR detail::is_pointer_like<T>::value
351#define ZEROERR_IS_MAP detail::ele_type_is_pair<T>::value
352#define ZEROERR_IS_POD std::is_standard_layout<T>::value
353#define ZEROERR_IS_EXT detail::has_extension<T>::value
361#pragma pop_macro("_LIBCPP_REMOVE_TRANSITIVE_INCLUDES")
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_POP
Definition config.h:283
#define ZEROERR_SUPPRESS_COMMON_WARNINGS_PUSH
Definition config.h:235
typename to_store_type< T >::type to_store_type_t
Definition typetraits.h:285
auto tuple_get(T &&value) -> decltype(get< I >(std::forward< T >(value)))
Definition typetraits.h:182
void_t< decltype(std::declval< S & >()<< std::declval< const T & >())> has_stream_operator
Definition typetraits.h:94
void_t< decltype(std::declval< T >().begin()), decltype(std::declval< T >().end()), decltype(std::declval< T >().find(std::declval< typename T::key_type >())), decltype(std::declval< T >().insert(std::declval< typename T::value_type >()))> has_begin_end_find_insert
Definition typetraits.h:125
void void_t
Definition typetraits.h:55
void visit2_at(T1 &tup1, T2 &tup2, size_t idx, F &&fun)
Definition typetraits.h:329
typename std::enable_if<!std::is_array< T >::value >::type is_not_array
Definition typetraits.h:273
void visit_at(T &tup, size_t idx, F &&fun)
Definition typetraits.h:306
void_t< decltype((*std::declval< const T & >().begin()).first), decltype((*std::declval< const T & >().begin()).second)> has_pair_type
Definition typetraits.h:249
void_t< decltype(std::declval< const T & >().begin()), decltype(std::declval< const T & >().end()), decltype(*std::declval< decltype(std::declval< const T & >().begin())& >()), decltype(++std::declval< decltype(std::declval< const T & >().begin())& >()), decltype(std::declval< const T & >().begin() !=std::declval< const T & >().end()), decltype(std::declval< const T & >().begin()==std::declval< const T & >().end())> has_begin_end
Definition typetraits.h:112
Definition assert_text.cpp:5
Definition typetraits.h:61
static std::false_type value
Definition typetraits.h:62
Definition typetraits.h:66
static std::true_type value
Definition typetraits.h:67
Definition typetraits.h:252
Definition typetraits.h:77
Definition typetraits.h:187
Definition typetraits.h:217
Definition typetraits.h:226
Definition typetraits.h:128
Definition typetraits.h:202
Definition typetraits.h:154
Definition typetraits.h:115
Definition typetraits.h:209
Definition typetraits.h:230
Definition typetraits.h:164
Definition typetraits.h:85
Definition typetraits.h:97
Definition typetraits.h:135
Definition typetraits.h:151
Definition typetraits.h:194
Definition typetraits.h:171
Definition typetraits.h:74
T type
Definition typetraits.h:276
T type
Definition typetraits.h:281
Definition typetraits.h:258
T type
Definition typetraits.h:259
static void visit(T1 &, T2 &, size_t, F &&)
Definition typetraits.h:325
Definition typetraits.h:312
static void visit(T1 &tup1, T2 &tup2, size_t idx, F &&fun)
Definition typetraits.h:314
static void visit(T &, size_t, F &&)
Definition typetraits.h:302
Definition typetraits.h:289
static void visit(T &tup, size_t idx, F &&fun)
Definition typetraits.h:291
rank is a helper class for Printer to define the priority of overloaded functions.
Definition typetraits.h:43