16 template<
class... args_t>
17 concept log_acceptable_args_c = (
sizeof...(args_t) > 0 && format_acceptable_args_c<char_type, args_t...>);
22 inline string format_macro_user_message()
27 inline string format_macro_user_message(
const char* pszUserMessage)
32 inline string format_macro_user_message(
string sUserMessage)
37 template<
class first_arg_t,
class... rest_args_t>
38 requires(log_acceptable_args_c<first_arg_t, rest_args_t...>)
39 string format_macro_user_message(
40 const format_string_strong_checks<first_arg_t, rest_args_t...> sFormat,
41 first_arg_t&& firstArg,
42 rest_args_t&&... restArgs)
44 return string::static_format(sFormat, std::forward<first_arg_t>(firstArg), std::forward<rest_args_t>(restArgs)...);
51 #define _QX_MACRO_USER_MESSAGE_0()
52 #define _QX_MACRO_USER_MESSAGE_1(a1) a1
53 #define _QX_MACRO_USER_MESSAGE_2(a1, a2) QXT(a1), a2
54 #define _QX_MACRO_USER_MESSAGE_3(a1, a2, a3) QXT(a1), a2, a3
55 #define _QX_MACRO_USER_MESSAGE_4(a1, a2, a3, a4) QXT(a1), a2, a3, a4
56 #define _QX_MACRO_USER_MESSAGE_5(a1, a2, a3, a4, a5) QXT(a1), a2, a3, a4, a5
57 #define _QX_MACRO_USER_MESSAGE_6(a1, a2, a3, a4, a5, a6) QXT(a1), a2, a3, a4, a5, a6
58 #define _QX_MACRO_USER_MESSAGE_7(a1, a2, a3, a4, a5, a6, a7) QXT(a1), a2, a3, a4, a5, a6, a7
59 #define _QX_MACRO_USER_MESSAGE_8(a1, a2, a3, a4, a5, a6, a7, a8) QXT(a1), a2, a3, a4, a5, a6, a7, a8
60 #define _QX_MACRO_USER_MESSAGE_9(a1, a2, a3, a4, a5, a6, a7, a8, a9) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9
61 #define _QX_MACRO_USER_MESSAGE_10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10
62 #define _QX_MACRO_USER_MESSAGE_11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11
63 #define _QX_MACRO_USER_MESSAGE_12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12
64 #define _QX_MACRO_USER_MESSAGE_13(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13
65 #define _QX_MACRO_USER_MESSAGE_14(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14
66 #define _QX_MACRO_USER_MESSAGE_15(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15
67 #define _QX_MACRO_USER_MESSAGE_16(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16
68 #define _QX_MACRO_USER_MESSAGE_17(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17
69 #define _QX_MACRO_USER_MESSAGE_18(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18
70 #define _QX_MACRO_USER_MESSAGE_19(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19
71 #define _QX_MACRO_USER_MESSAGE_20(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20
72 #define _QX_MACRO_USER_MESSAGE_21(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21
73 #define _QX_MACRO_USER_MESSAGE_22(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22
74 #define _QX_MACRO_USER_MESSAGE_23(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23
75 #define _QX_MACRO_USER_MESSAGE_24(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24
76 #define _QX_MACRO_USER_MESSAGE_25(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25
77 #define _QX_MACRO_USER_MESSAGE_26(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26
78 #define _QX_MACRO_USER_MESSAGE_27(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27
79 #define _QX_MACRO_USER_MESSAGE_28(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28
80 #define _QX_MACRO_USER_MESSAGE_29(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29
81 #define _QX_MACRO_USER_MESSAGE_30(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30
82 #define _QX_MACRO_USER_MESSAGE_31(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31
83 #define _QX_MACRO_USER_MESSAGE_32(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32) QXT(a1), a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32
86 #define _QX_MACRO_USER_MESSAGE(...) \
87 qx::details::format_macro_user_message( \
88 QX_EXPAND(QX_APPEND_VA_ARG_COUNT(_QX_MACRO_USER_MESSAGE_, __VA_ARGS__)(__VA_ARGS__)))
requires static format_acceptable_args_c< char_type, args_t... > basic_string static_format(const format_string_type< std::type_identity_t< args_t >... > sFormat, args_t &&... args)
Create a string by formatting it with the format string and the args.
requires(same_variadic_args_v< args_t... >) const expr auto coalesce(args_t &&... args)
Coalesce function, C# a ?? b analogue.
string to_string(cstring_view stringView, const std::locale &locale=std::locale())
Convert a char string to common string type.