Loading...
Searching...
No Matches
Go to the documentation of this file.
11#include <daw/daw_cpp_feature_check.h>
15#if DAW_HAS_GCC_VER_LT( 13, 3 )
16#define DAW_JSON_DONT_USE_CONCEPTS
19#if not defined( DAW_JSON_DONT_USE_CONCEPTS ) and defined( __cpp_lib_concepts )
20#if __cpp_lib_concepts >= 202002L
21#define DAW_JSON_USE_CONCEPTS
26#define DAW_JSON_MAKE_REQ_TRAIT_CUSTOM( Name, ... ) \
27 template<typename, typename = void> \
28 inline constexpr bool Name = false; \
30 template<typename T> \
31 inline constexpr bool Name<T, std::void_t<decltype( __VA_ARGS__ )>> = true
33#if defined( DAW_JSON_USE_CONCEPTS )
34#define DAW_JSON_MAKE_REQ_TRAIT( Name, ... ) \
35 template<typename T> \
36 inline constexpr bool Name = requires { \
41#define DAW_JSON_MAKE_REQ_TRAIT( Name, ... ) \
42 DAW_JSON_MAKE_REQ_TRAIT_CUSTOM( Name, __VA_ARGS__ )
45#if defined( DAW_JSON_USE_CONCEPTS )
46#define DAW_JSON_MAKE_REQ_TRAIT2( Name, ... ) \
47 template<typename T, typename U> \
48 concept Name = requires { \
52#define DAW_JSON_MAKE_REQ_TRAIT2( Name, ... ) \
53 template<typename, typename, typename = void> \
54 inline constexpr bool Name = false; \
56 template<typename T, typename U> \
57 inline constexpr bool Name<T, U, std::void_t<decltype( __VA_ARGS__ )>> = \
61#if defined( DAW_JSON_USE_CONCEPTS )
62#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT_NT( Name, ... ) \
63 template<typename T> \
64 concept Name = requires { \
65 typename __VA_ARGS__; \
68#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT_NT( Name, ... ) \
69 template<typename, typename = void> \
70 inline constexpr bool Name = false; \
72 template<typename T> \
73 inline constexpr bool Name<T, std::void_t<__VA_ARGS__>> = true
76#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT_CUSTOM( Name, \
78 template<typename, typename = void> \
79 inline constexpr bool Name = false; \
81 template<typename T> \
82 inline constexpr bool Name<T, std::void_t<typename __VA_ARGS__>> = true
84#if defined( DAW_JSON_USE_CONCEPTS )
85#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT( Name, ... ) \
86 template<typename T> \
87 concept Name = requires { \
88 typename __VA_ARGS__; \
91#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT( Name, ... ) \
92 DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT_CUSTOM( Name, __VA_ARGS__ )
95#if defined( DAW_JSON_USE_CONCEPTS )
96#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT2( Name, ... ) \
97 template<typename T, typename U> \
98 concept Name = requires { \
102#define DAW_JSON_MAKE_REQ_TYPE_ALIAS_TRAIT2( Name, ... ) \
103 template<typename, typename, typename = void> \
104 inline constexpr bool Name = false; \
106 template<typename T, typename U> \
107 inline constexpr bool Name<T, U, std::void_t<__VA_ARGS__>> = true