cppx-core
macro-repeat.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 $repeat CPPX_REPEAT
12 #endif
13 
19 
20 #define CPPX_REPEAT( n, what ) \
21  CPPX_REPEAT_EXPANSION_HELPER_( what, n )
22 
24 #define CPPX_REPEAT_EXPANSION_HELPER_( m, n_times ) \
25  CPPX_INVOKE_MACRO( CPPX_JOINED( CPPX_REPEAT_, n_times ), ( m ) )
26 
27 #define CPPX_REPEAT_63( m ) \
28  CPPX_INVOKE_MACRO_B( m, () ) \
29  CPPX_REPEAT_62( m )
30 
31 #define CPPX_REPEAT_62( m ) \
32  CPPX_INVOKE_MACRO_B( m, () ) \
33  CPPX_REPEAT_61( m )
34 
35 #define CPPX_REPEAT_61( m ) \
36  CPPX_INVOKE_MACRO_B( m, () ) \
37  CPPX_REPEAT_60( m )
38 
39 #define CPPX_REPEAT_60( m ) \
40  CPPX_INVOKE_MACRO_B( m, () ) \
41  CPPX_REPEAT_59( m )
42 
43 #define CPPX_REPEAT_59( m ) \
44  CPPX_INVOKE_MACRO_B( m, () ) \
45  CPPX_REPEAT_58( m )
46 
47 #define CPPX_REPEAT_58( m ) \
48  CPPX_INVOKE_MACRO_B( m, () ) \
49  CPPX_REPEAT_57( m )
50 
51 #define CPPX_REPEAT_57( m ) \
52  CPPX_INVOKE_MACRO_B( m, () ) \
53  CPPX_REPEAT_56( m )
54 
55 #define CPPX_REPEAT_56( m ) \
56  CPPX_INVOKE_MACRO_B( m, () ) \
57  CPPX_REPEAT_55( m )
58 
59 #define CPPX_REPEAT_55( m ) \
60  CPPX_INVOKE_MACRO_B( m, () ) \
61  CPPX_REPEAT_54( m )
62 
63 #define CPPX_REPEAT_54( m ) \
64  CPPX_INVOKE_MACRO_B( m, () ) \
65  CPPX_REPEAT_53( m )
66 
67 #define CPPX_REPEAT_53( m ) \
68  CPPX_INVOKE_MACRO_B( m, () ) \
69  CPPX_REPEAT_52( m )
70 
71 #define CPPX_REPEAT_52( m ) \
72  CPPX_INVOKE_MACRO_B( m, () ) \
73  CPPX_REPEAT_51( m )
74 
75 #define CPPX_REPEAT_51( m ) \
76  CPPX_INVOKE_MACRO_B( m, () ) \
77  CPPX_REPEAT_50( m )
78 
79 #define CPPX_REPEAT_50( m ) \
80  CPPX_INVOKE_MACRO_B( m, () ) \
81  CPPX_REPEAT_49( m )
82 
83 #define CPPX_REPEAT_49( m ) \
84  CPPX_INVOKE_MACRO_B( m, () ) \
85  CPPX_REPEAT_48( m )
86 
87 #define CPPX_REPEAT_48( m ) \
88  CPPX_INVOKE_MACRO_B( m, () ) \
89  CPPX_REPEAT_47( m )
90 
91 #define CPPX_REPEAT_47( m ) \
92  CPPX_INVOKE_MACRO_B( m, () ) \
93  CPPX_REPEAT_46( m )
94 
95 #define CPPX_REPEAT_46( m ) \
96  CPPX_INVOKE_MACRO_B( m, () ) \
97  CPPX_REPEAT_45( m )
98 
99 #define CPPX_REPEAT_45( m ) \
100  CPPX_INVOKE_MACRO_B( m, () ) \
101  CPPX_REPEAT_44( m )
102 
103 #define CPPX_REPEAT_44( m ) \
104  CPPX_INVOKE_MACRO_B( m, () ) \
105  CPPX_REPEAT_43( m )
106 
107 #define CPPX_REPEAT_43( m ) \
108  CPPX_INVOKE_MACRO_B( m, () ) \
109  CPPX_REPEAT_42( m )
110 
111 #define CPPX_REPEAT_42( m ) \
112  CPPX_INVOKE_MACRO_B( m, () ) \
113  CPPX_REPEAT_41( m )
114 
115 #define CPPX_REPEAT_41( m ) \
116  CPPX_INVOKE_MACRO_B( m, () ) \
117  CPPX_REPEAT_40( m )
118 
119 #define CPPX_REPEAT_40( m ) \
120  CPPX_INVOKE_MACRO_B( m, () ) \
121  CPPX_REPEAT_39( m )
122 
123 #define CPPX_REPEAT_39( m ) \
124  CPPX_INVOKE_MACRO_B( m, () ) \
125  CPPX_REPEAT_38( m )
126 
127 #define CPPX_REPEAT_38( m ) \
128  CPPX_INVOKE_MACRO_B( m, () ) \
129  CPPX_REPEAT_37( m )
130 
131 #define CPPX_REPEAT_37( m ) \
132  CPPX_INVOKE_MACRO_B( m, () ) \
133  CPPX_REPEAT_36( m )
134 
135 #define CPPX_REPEAT_36( m ) \
136  CPPX_INVOKE_MACRO_B( m, () ) \
137  CPPX_REPEAT_35( m )
138 
139 #define CPPX_REPEAT_35( m ) \
140  CPPX_INVOKE_MACRO_B( m, () ) \
141  CPPX_REPEAT_34( m )
142 
143 #define CPPX_REPEAT_34( m ) \
144  CPPX_INVOKE_MACRO_B( m, () ) \
145  CPPX_REPEAT_33( m )
146 
147 #define CPPX_REPEAT_33( m ) \
148  CPPX_INVOKE_MACRO_B( m, () ) \
149  CPPX_REPEAT_32( m )
150 
151 #define CPPX_REPEAT_32( m ) \
152  CPPX_INVOKE_MACRO_B( m, () ) \
153  CPPX_REPEAT_31( m )
154 
155 #define CPPX_REPEAT_31( m ) \
156  CPPX_INVOKE_MACRO_B( m, () ) \
157  CPPX_REPEAT_30( m )
158 
159 #define CPPX_REPEAT_30( m ) \
160  CPPX_INVOKE_MACRO_B( m, () ) \
161  CPPX_REPEAT_29( m )
162 
163 #define CPPX_REPEAT_29( m ) \
164  CPPX_INVOKE_MACRO_B( m, () ) \
165  CPPX_REPEAT_28( m )
166 
167 #define CPPX_REPEAT_28( m ) \
168  CPPX_INVOKE_MACRO_B( m, () ) \
169  CPPX_REPEAT_27( m )
170 
171 #define CPPX_REPEAT_27( m ) \
172  CPPX_INVOKE_MACRO_B( m, () ) \
173  CPPX_REPEAT_26( m )
174 
175 #define CPPX_REPEAT_26( m ) \
176  CPPX_INVOKE_MACRO_B( m, () ) \
177  CPPX_REPEAT_25( m )
178 
179 #define CPPX_REPEAT_25( m ) \
180  CPPX_INVOKE_MACRO_B( m, () ) \
181  CPPX_REPEAT_24( m )
182 
183 #define CPPX_REPEAT_24( m ) \
184  CPPX_INVOKE_MACRO_B( m, () ) \
185  CPPX_REPEAT_23( m )
186 
187 #define CPPX_REPEAT_23( m ) \
188  CPPX_INVOKE_MACRO_B( m, () ) \
189  CPPX_REPEAT_22( m )
190 
191 #define CPPX_REPEAT_22( m ) \
192  CPPX_INVOKE_MACRO_B( m, () ) \
193  CPPX_REPEAT_21( m )
194 
195 #define CPPX_REPEAT_21( m ) \
196  CPPX_INVOKE_MACRO_B( m, () ) \
197  CPPX_REPEAT_20( m )
198 
199 #define CPPX_REPEAT_20( m ) \
200  CPPX_INVOKE_MACRO_B( m, () ) \
201  CPPX_REPEAT_19( m )
202 
203 #define CPPX_REPEAT_19( m ) \
204  CPPX_INVOKE_MACRO_B( m, () ) \
205  CPPX_REPEAT_18( m )
206 
207 #define CPPX_REPEAT_18( m ) \
208  CPPX_INVOKE_MACRO_B( m, () ) \
209  CPPX_REPEAT_17( m )
210 
211 #define CPPX_REPEAT_17( m ) \
212  CPPX_INVOKE_MACRO_B( m, () ) \
213  CPPX_REPEAT_16( m )
214 
215 #define CPPX_REPEAT_16( m ) \
216  CPPX_INVOKE_MACRO_B( m, () ) \
217  CPPX_REPEAT_15( m )
218 
219 #define CPPX_REPEAT_15( m ) \
220  CPPX_INVOKE_MACRO_B( m, () ) \
221  CPPX_REPEAT_14( m )
222 
223 #define CPPX_REPEAT_14( m ) \
224  CPPX_INVOKE_MACRO_B( m, () ) \
225  CPPX_REPEAT_13( m )
226 
227 #define CPPX_REPEAT_13( m ) \
228  CPPX_INVOKE_MACRO_B( m, () ) \
229  CPPX_REPEAT_12( m )
230 
231 #define CPPX_REPEAT_12( m ) \
232  CPPX_INVOKE_MACRO_B( m, () ) \
233  CPPX_REPEAT_11( m )
234 
235 #define CPPX_REPEAT_11( m ) \
236  CPPX_INVOKE_MACRO_B( m, () ) \
237  CPPX_REPEAT_10( m )
238 
239 #define CPPX_REPEAT_10( m ) \
240  CPPX_INVOKE_MACRO_B( m, () ) \
241  CPPX_REPEAT_9( m )
242 
243 #define CPPX_REPEAT_9( m ) \
244  CPPX_INVOKE_MACRO_B( m, () ) \
245  CPPX_REPEAT_8( m )
246 
247 #define CPPX_REPEAT_8( m ) \
248  CPPX_INVOKE_MACRO_B( m, () ) \
249  CPPX_REPEAT_7( m )
250 
251 #define CPPX_REPEAT_7( m ) \
252  CPPX_INVOKE_MACRO_B( m, () ) \
253  CPPX_REPEAT_6( m )
254 
255 #define CPPX_REPEAT_6( m ) \
256  CPPX_INVOKE_MACRO_B( m, () ) \
257  CPPX_REPEAT_5( m )
258 
259 #define CPPX_REPEAT_5( m ) \
260  CPPX_INVOKE_MACRO_B( m, () ) \
261  CPPX_REPEAT_4( m )
262 
263 #define CPPX_REPEAT_4( m ) \
264  CPPX_INVOKE_MACRO_B( m, () ) \
265  CPPX_REPEAT_3( m )
266 
267 #define CPPX_REPEAT_3( m ) \
268  CPPX_INVOKE_MACRO_B( m, () ) \
269  CPPX_REPEAT_2( m )
270 
271 #define CPPX_REPEAT_2( m ) \
272  CPPX_INVOKE_MACRO_B( m, () ) \
273  CPPX_REPEAT_1( m )
274 
275 #define CPPX_REPEAT_1( m ) \
276  CPPX_INVOKE_MACRO_B( m, () )
277 
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.