cppx-core
macro-apply_with_fixed_arg.hpp
Go to the documentation of this file.
1 #pragma once // Source encoding: UTF-8 with BOM (π is a lowercase Greek "pi").
2 
10 
11 #ifndef CPPX_NO_DOLLARS_PLEASE
12 # define $apply_with_fixed_arg CPPX_APPLY_WITH_FIXED_ARG
13 #endif
14 
23 
24 #define CPPX_APPLY_WITH_FIXED_ARG( m, a, ... ) \
25  CPPX_AWFA_EXPANSION_HELPER( m, CPPX_N_ARGUMENTS( __VA_ARGS__ ), a, __VA_ARGS__ )
26 
28 #define CPPX_AWFA_EXPANSION_HELPER( m, n_args, a, ... ) \
29  CPPX_INVOKE_MACRO( CPPX_JOINED( CPPX_AWFA_APPLY_TO_, n_args ), ( m, a, __VA_ARGS__ ) )
30 
31 // Not using variadic arguments in the following because Visual C++ 2017 is very unhappy
32 // with that (variadic arguments works with g++ 8.2.0).
33 //
34 // Code generation program:
35 //
36 //#include <iostream>
37 //using namespace std;
38 //
39 //auto main() -> int
40 //{
41 // for( int i = 63; i > 1; --i )
42 // {
43 // cout << "#define CPPX_AWFA_APPLY_TO_" << i << "( m, a";
44 // for( int j = 1; j <= i; ++j ) { cout << ", a" << j; }
45 // cout << " ) \\" << endl;
46 // cout << " CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \\" << endl;
47 // cout << " CPPX_AWFA_APPLY_TO_" << i - 1 << "( m, a";
48 // for( int j = 2; j <= i; ++j ) { cout << ", a" << j; }
49 // cout << " )" << endl;
50 // cout << endl;
51 // }
52 //}
53 
54 #define CPPX_AWFA_APPLY_TO_63( m, a, 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 ) \
55  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
56  CPPX_AWFA_APPLY_TO_62( m, a, 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 )
57 
58 #define CPPX_AWFA_APPLY_TO_62( m, a, 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 ) \
59  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
60  CPPX_AWFA_APPLY_TO_61( m, a, 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 )
61 
62 #define CPPX_AWFA_APPLY_TO_61( m, a, 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 ) \
63  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
64  CPPX_AWFA_APPLY_TO_60( m, a, 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 )
65 
66 #define CPPX_AWFA_APPLY_TO_60( m, a, 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 ) \
67  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
68  CPPX_AWFA_APPLY_TO_59( m, a, 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 )
69 
70 #define CPPX_AWFA_APPLY_TO_59( m, a, 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 ) \
71  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
72  CPPX_AWFA_APPLY_TO_58( m, a, 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 )
73 
74 #define CPPX_AWFA_APPLY_TO_58( m, a, 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 ) \
75  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
76  CPPX_AWFA_APPLY_TO_57( m, a, 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 )
77 
78 #define CPPX_AWFA_APPLY_TO_57( m, a, 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 ) \
79  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
80  CPPX_AWFA_APPLY_TO_56( m, a, 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 )
81 
82 #define CPPX_AWFA_APPLY_TO_56( m, a, 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 ) \
83  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
84  CPPX_AWFA_APPLY_TO_55( m, a, 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 )
85 
86 #define CPPX_AWFA_APPLY_TO_55( m, a, 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 ) \
87  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
88  CPPX_AWFA_APPLY_TO_54( m, a, 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 )
89 
90 #define CPPX_AWFA_APPLY_TO_54( m, a, 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 ) \
91  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
92  CPPX_AWFA_APPLY_TO_53( m, a, 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 )
93 
94 #define CPPX_AWFA_APPLY_TO_53( m, a, 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 ) \
95  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
96  CPPX_AWFA_APPLY_TO_52( m, a, 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 )
97 
98 #define CPPX_AWFA_APPLY_TO_52( m, a, 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 ) \
99  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
100  CPPX_AWFA_APPLY_TO_51( m, a, 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 )
101 
102 #define CPPX_AWFA_APPLY_TO_51( m, a, 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 ) \
103  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
104  CPPX_AWFA_APPLY_TO_50( m, a, 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 )
105 
106 #define CPPX_AWFA_APPLY_TO_50( m, a, 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 ) \
107  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
108  CPPX_AWFA_APPLY_TO_49( m, a, 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 )
109 
110 #define CPPX_AWFA_APPLY_TO_49( m, a, 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 ) \
111  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
112  CPPX_AWFA_APPLY_TO_48( m, a, 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 )
113 
114 #define CPPX_AWFA_APPLY_TO_48( m, a, 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 ) \
115  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
116  CPPX_AWFA_APPLY_TO_47( m, a, 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 )
117 
118 #define CPPX_AWFA_APPLY_TO_47( m, a, 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 ) \
119  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
120  CPPX_AWFA_APPLY_TO_46( m, a, 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 )
121 
122 #define CPPX_AWFA_APPLY_TO_46( m, a, 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 ) \
123  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
124  CPPX_AWFA_APPLY_TO_45( m, a, 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 )
125 
126 #define CPPX_AWFA_APPLY_TO_45( m, a, 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 ) \
127  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
128  CPPX_AWFA_APPLY_TO_44( m, a, 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 )
129 
130 #define CPPX_AWFA_APPLY_TO_44( m, a, 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 ) \
131  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
132  CPPX_AWFA_APPLY_TO_43( m, a, 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 )
133 
134 #define CPPX_AWFA_APPLY_TO_43( m, a, 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 ) \
135  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
136  CPPX_AWFA_APPLY_TO_42( m, a, 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 )
137 
138 #define CPPX_AWFA_APPLY_TO_42( m, a, 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 ) \
139  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
140  CPPX_AWFA_APPLY_TO_41( m, a, 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 )
141 
142 #define CPPX_AWFA_APPLY_TO_41( m, a, 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 ) \
143  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
144  CPPX_AWFA_APPLY_TO_40( m, a, 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 )
145 
146 #define CPPX_AWFA_APPLY_TO_40( m, a, 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 ) \
147  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
148  CPPX_AWFA_APPLY_TO_39( m, a, 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 )
149 
150 #define CPPX_AWFA_APPLY_TO_39( m, a, 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 ) \
151  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
152  CPPX_AWFA_APPLY_TO_38( m, a, 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 )
153 
154 #define CPPX_AWFA_APPLY_TO_38( m, a, 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 ) \
155  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
156  CPPX_AWFA_APPLY_TO_37( m, a, 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 )
157 
158 #define CPPX_AWFA_APPLY_TO_37( m, a, 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 ) \
159  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
160  CPPX_AWFA_APPLY_TO_36( m, a, 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 )
161 
162 #define CPPX_AWFA_APPLY_TO_36( m, a, 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 ) \
163  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
164  CPPX_AWFA_APPLY_TO_35( m, a, 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 )
165 
166 #define CPPX_AWFA_APPLY_TO_35( m, a, 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 ) \
167  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
168  CPPX_AWFA_APPLY_TO_34( m, a, 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 )
169 
170 #define CPPX_AWFA_APPLY_TO_34( m, a, 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 ) \
171  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
172  CPPX_AWFA_APPLY_TO_33( m, a, 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 )
173 
174 #define CPPX_AWFA_APPLY_TO_33( m, a, 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 ) \
175  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
176  CPPX_AWFA_APPLY_TO_32( m, a, 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 )
177 
178 #define CPPX_AWFA_APPLY_TO_32( m, a, 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 ) \
179  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
180  CPPX_AWFA_APPLY_TO_31( m, a, 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 )
181 
182 #define CPPX_AWFA_APPLY_TO_31( m, a, 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 ) \
183  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
184  CPPX_AWFA_APPLY_TO_30( m, a, 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 )
185 
186 #define CPPX_AWFA_APPLY_TO_30( m, a, 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 ) \
187  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
188  CPPX_AWFA_APPLY_TO_29( m, a, 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 )
189 
190 #define CPPX_AWFA_APPLY_TO_29( m, a, 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 ) \
191  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
192  CPPX_AWFA_APPLY_TO_28( m, a, 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 )
193 
194 #define CPPX_AWFA_APPLY_TO_28( m, a, 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 ) \
195  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
196  CPPX_AWFA_APPLY_TO_27( m, a, 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 )
197 
198 #define CPPX_AWFA_APPLY_TO_27( m, a, 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 ) \
199  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
200  CPPX_AWFA_APPLY_TO_26( m, a, 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 )
201 
202 #define CPPX_AWFA_APPLY_TO_26( m, a, 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 ) \
203  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
204  CPPX_AWFA_APPLY_TO_25( m, a, 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 )
205 
206 #define CPPX_AWFA_APPLY_TO_25( m, a, 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 ) \
207  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
208  CPPX_AWFA_APPLY_TO_24( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25 )
209 
210 #define CPPX_AWFA_APPLY_TO_24( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24 ) \
211  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
212  CPPX_AWFA_APPLY_TO_23( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24 )
213 
214 #define CPPX_AWFA_APPLY_TO_23( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23 ) \
215  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
216  CPPX_AWFA_APPLY_TO_22( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23 )
217 
218 #define CPPX_AWFA_APPLY_TO_22( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22 ) \
219  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
220  CPPX_AWFA_APPLY_TO_21( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22 )
221 
222 #define CPPX_AWFA_APPLY_TO_21( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21 ) \
223  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
224  CPPX_AWFA_APPLY_TO_20( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21 )
225 
226 #define CPPX_AWFA_APPLY_TO_20( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 ) \
227  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
228  CPPX_AWFA_APPLY_TO_19( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20 )
229 
230 #define CPPX_AWFA_APPLY_TO_19( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 ) \
231  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
232  CPPX_AWFA_APPLY_TO_18( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19 )
233 
234 #define CPPX_AWFA_APPLY_TO_18( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 ) \
235  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
236  CPPX_AWFA_APPLY_TO_17( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18 )
237 
238 #define CPPX_AWFA_APPLY_TO_17( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 ) \
239  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
240  CPPX_AWFA_APPLY_TO_16( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17 )
241 
242 #define CPPX_AWFA_APPLY_TO_16( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 ) \
243  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
244  CPPX_AWFA_APPLY_TO_15( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16 )
245 
246 #define CPPX_AWFA_APPLY_TO_15( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 ) \
247  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
248  CPPX_AWFA_APPLY_TO_14( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 )
249 
250 #define CPPX_AWFA_APPLY_TO_14( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 ) \
251  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
252  CPPX_AWFA_APPLY_TO_13( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14 )
253 
254 #define CPPX_AWFA_APPLY_TO_13( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 ) \
255  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
256  CPPX_AWFA_APPLY_TO_12( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13 )
257 
258 #define CPPX_AWFA_APPLY_TO_12( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 ) \
259  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
260  CPPX_AWFA_APPLY_TO_11( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 )
261 
262 #define CPPX_AWFA_APPLY_TO_11( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 ) \
263  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
264  CPPX_AWFA_APPLY_TO_10( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 )
265 
266 #define CPPX_AWFA_APPLY_TO_10( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 ) \
267  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
268  CPPX_AWFA_APPLY_TO_9( m, a, a2, a3, a4, a5, a6, a7, a8, a9, a10 )
269 
270 #define CPPX_AWFA_APPLY_TO_9( m, a, a1, a2, a3, a4, a5, a6, a7, a8, a9 ) \
271  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
272  CPPX_AWFA_APPLY_TO_8( m, a, a2, a3, a4, a5, a6, a7, a8, a9 )
273 
274 #define CPPX_AWFA_APPLY_TO_8( m, a, a1, a2, a3, a4, a5, a6, a7, a8 ) \
275  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
276  CPPX_AWFA_APPLY_TO_7( m, a, a2, a3, a4, a5, a6, a7, a8 )
277 
278 #define CPPX_AWFA_APPLY_TO_7( m, a, a1, a2, a3, a4, a5, a6, a7 ) \
279  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
280  CPPX_AWFA_APPLY_TO_6( m, a, a2, a3, a4, a5, a6, a7 )
281 
282 #define CPPX_AWFA_APPLY_TO_6( m, a, a1, a2, a3, a4, a5, a6 ) \
283  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
284  CPPX_AWFA_APPLY_TO_5( m, a, a2, a3, a4, a5, a6 )
285 
286 #define CPPX_AWFA_APPLY_TO_5( m, a, a1, a2, a3, a4, a5 ) \
287  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
288  CPPX_AWFA_APPLY_TO_4( m, a, a2, a3, a4, a5 )
289 
290 #define CPPX_AWFA_APPLY_TO_4( m, a, a1, a2, a3, a4 ) \
291  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
292  CPPX_AWFA_APPLY_TO_3( m, a, a2, a3, a4 )
293 
294 #define CPPX_AWFA_APPLY_TO_3( m, a, a1, a2, a3 ) \
295  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
296  CPPX_AWFA_APPLY_TO_2( m, a, a2, a3 )
297 
298 #define CPPX_AWFA_APPLY_TO_2( m, a, a1, a2 ) \
299  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) ) \
300  CPPX_AWFA_APPLY_TO_1( m, a, a2 )
301 
302 #define CPPX_AWFA_APPLY_TO_1( m, a, a1 ) \
303  CPPX_INVOKE_MACRO_B( m, ( a, a1 ) )
304 
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.