cppx-core
macro-apply.hpp
Go to the documentation of this file.
1 #pragma once // Source encoding: UTF-8 with BOM (π is a lowercase Greek "pi").
2 
9 
10 #ifndef CPPX_NO_DOLLARS_PLEASE
11 # define $apply CPPX_APPLY
12 #endif
13 
19 #define CPPX_APPLY( m, ... ) \
20  CPPX_APPLY_EXPANSION_HELPER_( m, CPPX_N_ARGUMENTS( __VA_ARGS__ ), __VA_ARGS__ )
21 
23 #define CPPX_APPLY_EXPANSION_HELPER_( m, n_args, ... ) \
24  CPPX_INVOKE_MACRO( CPPX_JOINED( CPPX_APPLY_TO_, n_args ), ( m, __VA_ARGS__ ) )
25 
26 // Not using variadic arguments in the following because Visual C++ 2017 is very unhappy
27 // with that (variadic arguments works with g++ 8.2.0).
28 
29 #define CPPX_APPLY_TO_63( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63 ) \
30  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
31  CPPX_APPLY_TO_62( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63 )
32 
33 #define CPPX_APPLY_TO_62( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62 ) \
34  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
35  CPPX_APPLY_TO_61( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62 )
36 
37 #define CPPX_APPLY_TO_61( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61 ) \
38  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
39  CPPX_APPLY_TO_60( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61 )
40 
41 #define CPPX_APPLY_TO_60( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60 ) \
42  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
43  CPPX_APPLY_TO_59( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60 )
44 
45 #define CPPX_APPLY_TO_59( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59 ) \
46  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
47  CPPX_APPLY_TO_58( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59 )
48 
49 #define CPPX_APPLY_TO_58( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58 ) \
50  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
51  CPPX_APPLY_TO_57( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58 )
52 
53 #define CPPX_APPLY_TO_57( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57 ) \
54  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
55  CPPX_APPLY_TO_56( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57 )
56 
57 #define CPPX_APPLY_TO_56( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56 ) \
58  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
59  CPPX_APPLY_TO_55( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56 )
60 
61 #define CPPX_APPLY_TO_55( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55 ) \
62  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
63  CPPX_APPLY_TO_54( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55 )
64 
65 #define CPPX_APPLY_TO_54( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54 ) \
66  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
67  CPPX_APPLY_TO_53( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54 )
68 
69 #define CPPX_APPLY_TO_53( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53 ) \
70  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
71  CPPX_APPLY_TO_52( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53 )
72 
73 #define CPPX_APPLY_TO_52( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52 ) \
74  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
75  CPPX_APPLY_TO_51( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52 )
76 
77 #define CPPX_APPLY_TO_51( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51 ) \
78  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
79  CPPX_APPLY_TO_50( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51 )
80 
81 #define CPPX_APPLY_TO_50( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50 ) \
82  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
83  CPPX_APPLY_TO_49( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50 )
84 
85 #define CPPX_APPLY_TO_49( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49 ) \
86  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
87  CPPX_APPLY_TO_48( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49 )
88 
89 #define CPPX_APPLY_TO_48( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48 ) \
90  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
91  CPPX_APPLY_TO_47( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48 )
92 
93 #define CPPX_APPLY_TO_47( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47 ) \
94  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
95  CPPX_APPLY_TO_46( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47 )
96 
97 #define CPPX_APPLY_TO_46( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46 ) \
98  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
99  CPPX_APPLY_TO_45( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46 )
100 
101 #define CPPX_APPLY_TO_45( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45 ) \
102  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
103  CPPX_APPLY_TO_44( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45 )
104 
105 #define CPPX_APPLY_TO_44( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44 ) \
106  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
107  CPPX_APPLY_TO_43( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44 )
108 
109 #define CPPX_APPLY_TO_43( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43 ) \
110  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
111  CPPX_APPLY_TO_42( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43 )
112 
113 #define CPPX_APPLY_TO_42( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42 ) \
114  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
115  CPPX_APPLY_TO_41( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42 )
116 
117 #define CPPX_APPLY_TO_41( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41 ) \
118  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
119  CPPX_APPLY_TO_40( m, 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, a33, a34, a35, a36, a37, a38, a39, a40, a41 )
120 
121 #define CPPX_APPLY_TO_40( m, 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, a33, a34, a35, a36, a37, a38, a39, a40 ) \
122  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
123  CPPX_APPLY_TO_39( m, 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, a33, a34, a35, a36, a37, a38, a39, a40 )
124 
125 #define CPPX_APPLY_TO_39( m, 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, a33, a34, a35, a36, a37, a38, a39 ) \
126  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
127  CPPX_APPLY_TO_38( m, 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, a33, a34, a35, a36, a37, a38, a39 )
128 
129 #define CPPX_APPLY_TO_38( m, 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, a33, a34, a35, a36, a37, a38 ) \
130  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
131  CPPX_APPLY_TO_37( m, 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, a33, a34, a35, a36, a37, a38 )
132 
133 #define CPPX_APPLY_TO_37( m, 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, a33, a34, a35, a36, a37 ) \
134  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
135  CPPX_APPLY_TO_36( m, 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, a33, a34, a35, a36, a37 )
136 
137 #define CPPX_APPLY_TO_36( m, 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, a33, a34, a35, a36 ) \
138  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
139  CPPX_APPLY_TO_35( m, 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, a33, a34, a35, a36 )
140 
141 #define CPPX_APPLY_TO_35( m, 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, a33, a34, a35 ) \
142  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
143  CPPX_APPLY_TO_34( m, 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, a33, a34, a35 )
144 
145 #define CPPX_APPLY_TO_34( m, 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, a33, a34 ) \
146  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
147  CPPX_APPLY_TO_33( m, 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, a33, a34 )
148 
149 #define CPPX_APPLY_TO_33( m, 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, a33 ) \
150  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
151  CPPX_APPLY_TO_32( m, 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, a33 )
152 
153 #define CPPX_APPLY_TO_32( m, 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 ) \
154  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
155  CPPX_APPLY_TO_31( m, 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 )
156 
157 #define CPPX_APPLY_TO_31( m, 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 ) \
158  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
159  CPPX_APPLY_TO_30( m, 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 )
160 
161 #define CPPX_APPLY_TO_30( m, 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 ) \
162  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
163  CPPX_APPLY_TO_29( m, 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 )
164 
165 #define CPPX_APPLY_TO_29( m, 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 ) \
166  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
167  CPPX_APPLY_TO_28( m, 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 )
168 
169 #define CPPX_APPLY_TO_28( m, 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 ) \
170  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
171  CPPX_APPLY_TO_27( m, 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 )
172 
173 #define CPPX_APPLY_TO_27( m, 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 ) \
174  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
175  CPPX_APPLY_TO_26( m, 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 )
176 
177 #define CPPX_APPLY_TO_26( m, 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 ) \
178  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
179  CPPX_APPLY_TO_25( m, 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 )
180 
181 #define CPPX_APPLY_TO_25( m, 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 ) \
182  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
183  CPPX_APPLY_TO_24( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25 )
184 
185 #define CPPX_APPLY_TO_24( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24 ) \
186  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
187  CPPX_APPLY_TO_23( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24 )
188 
189 #define CPPX_APPLY_TO_23( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23 ) \
190  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
191  CPPX_APPLY_TO_22( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23 )
192 
193 #define CPPX_APPLY_TO_22( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22 ) \
194  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
195  CPPX_APPLY_TO_21( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22 )
196 
197 #define CPPX_APPLY_TO_21( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21 ) \
198  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
199  CPPX_APPLY_TO_20( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21 )
200 
201 #define CPPX_APPLY_TO_20( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ) \
202  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
203  CPPX_APPLY_TO_19( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 )
204 
205 #define CPPX_APPLY_TO_19( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ) \
206  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
207  CPPX_APPLY_TO_18( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 )
208 
209 #define CPPX_APPLY_TO_18( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ) \
210  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
211  CPPX_APPLY_TO_17( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 )
212 
213 #define CPPX_APPLY_TO_17( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ) \
214  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
215  CPPX_APPLY_TO_16( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 )
216 
217 #define CPPX_APPLY_TO_16( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ) \
218  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
219  CPPX_APPLY_TO_15( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 )
220 
221 #define CPPX_APPLY_TO_15( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ) \
222  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
223  CPPX_APPLY_TO_14( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 )
224 
225 #define CPPX_APPLY_TO_14( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ) \
226  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
227  CPPX_APPLY_TO_13( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 )
228 
229 #define CPPX_APPLY_TO_13( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 ) \
230  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
231  CPPX_APPLY_TO_12( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 )
232 
233 #define CPPX_APPLY_TO_12( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 ) \
234  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
235  CPPX_APPLY_TO_11( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 )
236 
237 #define CPPX_APPLY_TO_11( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 ) \
238  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
239  CPPX_APPLY_TO_10( m, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 )
240 
241 #define CPPX_APPLY_TO_10( m, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 ) \
242  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
243  CPPX_APPLY_TO_9( m, a2, a3, a4, a5, a6, a7, a8, a9, a10 )
244 
245 #define CPPX_APPLY_TO_9( m, a1, a2, a3, a4, a5, a6, a7, a8, a9 ) \
246  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
247  CPPX_APPLY_TO_8( m, a2, a3, a4, a5, a6, a7, a8, a9 )
248 
249 #define CPPX_APPLY_TO_8( m, a1, a2, a3, a4, a5, a6, a7, a8 ) \
250  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
251  CPPX_APPLY_TO_7( m, a2, a3, a4, a5, a6, a7, a8 )
252 
253 #define CPPX_APPLY_TO_7( m, a1, a2, a3, a4, a5, a6, a7 ) \
254  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
255  CPPX_APPLY_TO_6( m, a2, a3, a4, a5, a6, a7 )
256 
257 #define CPPX_APPLY_TO_6( m, a1, a2, a3, a4, a5, a6 ) \
258  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
259  CPPX_APPLY_TO_5( m, a2, a3, a4, a5, a6 )
260 
261 #define CPPX_APPLY_TO_5( m, a1, a2, a3, a4, a5 ) \
262  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
263  CPPX_APPLY_TO_4( m, a2, a3, a4, a5 )
264 
265 #define CPPX_APPLY_TO_4( m, a1, a2, a3, a4 ) \
266  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
267  CPPX_APPLY_TO_3( m, a2, a3, a4 )
268 
269 #define CPPX_APPLY_TO_3( m, a1, a2, a3 ) \
270  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
271  CPPX_APPLY_TO_2( m, a2, a3 )
272 
273 #define CPPX_APPLY_TO_2( m, a1, a2 ) \
274  CPPX_INVOKE_MACRO_B( m, ( a1 ) ) \
275  CPPX_APPLY_TO_1( m, a2 )
276 
277 #define CPPX_APPLY_TO_1( m, a1 ) \
278  CPPX_INVOKE_MACRO_B( m, ( a1 ) )
279 
Mostly this is a concession to the idiosyncracies of Visual C++, which still as of its 2017 version i...
The $n_arguments macro evaluates to the number of arguments that are passed to it.
$joined forms the ## concatenation of the expansions of its arguments.