16 #define QX_CHAR_T_CHAR 0
17 #define QX_CHAR_T_WCHAR_T 1
20 #define QX_CONF_CHAR QX_CHAR_T_WCHAR_T
24 #define QX_FMT_LIB_FMT 0
25 #define QX_FMT_LIB_STD 1
27 #ifndef QX_CONF_FMT_LIB
28 #if __has_include("fmt/format.h")
29 #define QX_CONF_FMT_LIB QX_FMT_LIB_FMT
31 #define QX_CONF_FMT_LIB QX_FMT_LIB_STD
36 #define QX_ALL_CHAR_TYPES char, wchar_t
41 using all_char_types = std::tuple<QX_ALL_CHAR_TYPES>;
46 #if QX_CONF_CHAR == QX_CHAR_T_CHAR
47 #define QX_CHAR_TYPE char
48 #define _QXT(quote) quote
49 #elif QX_CONF_CHAR == QX_CHAR_T_WCHAR_T
50 #define QX_CHAR_TYPE wchar_t
51 #define _QXT(quote) L##quote
53 #if !defined(QX_CONF_UNICODE_MACRO)
54 #define QX_CONF_UNICODE_MACRO 1
57 #if QX_CONF_UNICODE_MACRO && QX_WIN
61 #error Unsupported char type
64 #define QXT(quote) _QXT(quote)
69 using char_type = QX_CHAR_TYPE;
70 using forbidden_char_types = tuple_utils::remove_t<details::all_char_types, std::tuple<char_type>>;
74 #if QX_CONF_FMT_LIB == QX_FMT_LIB_FMT
75 QX_PUSH_SUPPRESS_ALL_WARNINGS();
77 #define FMT_HEADER_ONLY 1
78 #include "fmt/format.h"
79 #include "fmt/xchar.h"
80 QX_POP_SUPPRESS_WARNINGS();
82 #elif QX_CONF_FMT_LIB == QX_FMT_LIB_STD
86 #error No fmt lib selected
Contains utils for working with std::tuple.