31#ifndef ETL_VISITOR_INCLUDED
32#define ETL_VISITOR_INCLUDED
54#if ETL_USING_CPP11 && !defined(ETL_VISITOR_FORCE_CPP03_IMPLEMENTATION)
60 template <
typename T1,
typename... Types>
61 class visitable :
public visitable<T1>,
public visitable<Types...>
65 using visitable<T1>::accept;
66 using visitable<Types...>::accept;
73 template <
typename T1>
78 virtual ~visitable() =
default;
80 virtual void accept(T1&) = 0;
90 template <
typename T1,
typename T2 =
void,
typename T3 =
void,
typename T4 =
void>
97 virtual void accept(
T1&) = 0;
98 virtual void accept(
T2&) = 0;
99 virtual void accept(
T3&) = 0;
100 virtual void accept(
T4&) = 0;
108 template <
typename T1,
typename T2,
typename T3>
115 virtual void accept(
T1&) = 0;
116 virtual void accept(
T2&) = 0;
117 virtual void accept(
T3&) = 0;
125 template <
typename T1,
typename T2>
132 virtual void accept(
T1&) = 0;
133 virtual void accept(
T2&) = 0;
141 template <
typename T1>
148 virtual void accept(
T1&) = 0;
161#if ETL_USING_CPP11 && !defined(ETL_VISITOR_FORCE_CPP03_IMPLEMENTATION)
167 template <
typename T1,
typename...
Types>
180 template <
typename T1>
181 class visitor<T1> :
public virtual visitor_tag
185 virtual ~visitor() =
default;
187 virtual void visit(T1) = 0;
197 template <
typename T1,
typename T2 = void,
typename T3 = void,
typename T4 = void,
198 typename T5 = void,
typename T6 = void,
typename T7 = void,
typename T8 = void,
199 typename T9 = void,
typename T10 = void,
typename T11 = void,
typename T12 = void,
200 typename T13 = void,
typename T14 = void,
typename T15 = void,
typename T16 =
void>
207 virtual void visit(
T1) = 0;
208 virtual void visit(
T2) = 0;
209 virtual void visit(
T3) = 0;
210 virtual void visit(
T4) = 0;
211 virtual void visit(
T5) = 0;
212 virtual void visit(
T6) = 0;
213 virtual void visit(
T7) = 0;
214 virtual void visit(
T8) = 0;
215 virtual void visit(
T9) = 0;
216 virtual void visit(
T10) = 0;
217 virtual void visit(
T11) = 0;
218 virtual void visit(
T12) = 0;
219 virtual void visit(
T13) = 0;
220 virtual void visit(
T14) = 0;
221 virtual void visit(
T15) = 0;
222 virtual void visit(
T16) = 0;
230 template <
typename T1,
typename T2,
typename T3,
typename T4,
231 typename T5,
typename T6,
typename T7,
typename T8,
232 typename T9,
typename T10,
typename T11,
typename T12,
233 typename T13,
typename T14,
typename T15>
234 class visitor<
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12,
T13,
T14,
T15> :
public visitor_tag
240 virtual void visit(
T1) = 0;
241 virtual void visit(
T2) = 0;
242 virtual void visit(
T3) = 0;
243 virtual void visit(
T4) = 0;
244 virtual void visit(
T5) = 0;
245 virtual void visit(
T6) = 0;
246 virtual void visit(
T7) = 0;
247 virtual void visit(
T8) = 0;
248 virtual void visit(
T9) = 0;
249 virtual void visit(
T10) = 0;
250 virtual void visit(
T11) = 0;
251 virtual void visit(
T12) = 0;
252 virtual void visit(
T13) = 0;
253 virtual void visit(
T14) = 0;
254 virtual void visit(
T15) = 0;
262 template <
typename T1,
typename T2,
typename T3,
typename T4,
263 typename T5,
typename T6,
typename T7,
typename T8,
264 typename T9,
typename T10,
typename T11,
typename T12,
265 typename T13,
typename T14>
266 class visitor<
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12,
T13,
T14> :
public visitor_tag
272 virtual void visit(
T1) = 0;
273 virtual void visit(
T2) = 0;
274 virtual void visit(
T3) = 0;
275 virtual void visit(
T4) = 0;
276 virtual void visit(
T5) = 0;
277 virtual void visit(
T6) = 0;
278 virtual void visit(
T7) = 0;
279 virtual void visit(
T8) = 0;
280 virtual void visit(
T9) = 0;
281 virtual void visit(
T10) = 0;
282 virtual void visit(
T11) = 0;
283 virtual void visit(
T12) = 0;
284 virtual void visit(
T13) = 0;
285 virtual void visit(
T14) = 0;
293 template <
typename T1,
typename T2,
typename T3,
typename T4,
294 typename T5,
typename T6,
typename T7,
typename T8,
295 typename T9,
typename T10,
typename T11,
typename T12,
297 class visitor<
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12,
T13> :
public visitor_tag
303 virtual void visit(
T1) = 0;
304 virtual void visit(
T2) = 0;
305 virtual void visit(
T3) = 0;
306 virtual void visit(
T4) = 0;
307 virtual void visit(
T5) = 0;
308 virtual void visit(
T6) = 0;
309 virtual void visit(
T7) = 0;
310 virtual void visit(
T8) = 0;
311 virtual void visit(
T9) = 0;
312 virtual void visit(
T10) = 0;
313 virtual void visit(
T11) = 0;
314 virtual void visit(
T12) = 0;
315 virtual void visit(
T13) = 0;
323 template <
typename T1,
typename T2,
typename T3,
typename T4,
324 typename T5,
typename T6,
typename T7,
typename T8,
325 typename T9,
typename T10,
typename T11,
typename T12>
326 class visitor<
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11,
T12> :
public visitor_tag
332 virtual void visit(
T1) = 0;
333 virtual void visit(
T2) = 0;
334 virtual void visit(
T3) = 0;
335 virtual void visit(
T4) = 0;
336 virtual void visit(
T5) = 0;
337 virtual void visit(
T6) = 0;
338 virtual void visit(
T7) = 0;
339 virtual void visit(
T8) = 0;
340 virtual void visit(
T9) = 0;
341 virtual void visit(
T10) = 0;
342 virtual void visit(
T11) = 0;
343 virtual void visit(
T12) = 0;
351 template <
typename T1,
typename T2,
typename T3,
typename T4,
352 typename T5,
typename T6,
typename T7,
typename T8,
353 typename T9,
typename T10,
typename T11>
354 class visitor<
T1,
T2,
T3,
T4,
T5,
T6,
T7,
T8,
T9,
T10,
T11> :
public visitor_tag
360 virtual void visit(
T1) = 0;
361 virtual void visit(
T2) = 0;
362 virtual void visit(
T3) = 0;
363 virtual void visit(
T4) = 0;
364 virtual void visit(
T5) = 0;
365 virtual void visit(
T6) = 0;
366 virtual void visit(
T7) = 0;
367 virtual void visit(
T8) = 0;
368 virtual void visit(
T9) = 0;
369 virtual void visit(
T10) = 0;
370 virtual void visit(
T11) = 0;
378 template <
typename T1,
typename T2,
typename T3,
typename T4,
379 typename T5,
typename T6,
typename T7,
typename T8,
380 typename T9,
typename T10>
387 virtual void visit(
T1) = 0;
388 virtual void visit(
T2) = 0;
389 virtual void visit(
T3) = 0;
390 virtual void visit(
T4) = 0;
391 virtual void visit(
T5) = 0;
392 virtual void visit(
T6) = 0;
393 virtual void visit(
T7) = 0;
394 virtual void visit(
T8) = 0;
395 virtual void visit(
T9) = 0;
396 virtual void visit(
T10) = 0;
404 template <
typename T1,
typename T2,
typename T3,
typename T4,
405 typename T5,
typename T6,
typename T7,
typename T8,
413 virtual void visit(
T1) = 0;
414 virtual void visit(
T2) = 0;
415 virtual void visit(
T3) = 0;
416 virtual void visit(
T4) = 0;
417 virtual void visit(
T5) = 0;
418 virtual void visit(
T6) = 0;
419 virtual void visit(
T7) = 0;
420 virtual void visit(
T8) = 0;
421 virtual void visit(
T9) = 0;
429 template <
typename T1,
typename T2,
typename T3,
typename T4,
430 typename T5,
typename T6,
typename T7,
typename T8>
437 virtual void visit(
T1) = 0;
438 virtual void visit(
T2) = 0;
439 virtual void visit(
T3) = 0;
440 virtual void visit(
T4) = 0;
441 virtual void visit(
T5) = 0;
442 virtual void visit(
T6) = 0;
443 virtual void visit(
T7) = 0;
444 virtual void visit(
T8) = 0;
452 template <
typename T1,
typename T2,
typename T3,
typename T4,
453 typename T5,
typename T6,
typename T7>
460 virtual void visit(
T1) = 0;
461 virtual void visit(
T2) = 0;
462 virtual void visit(
T3) = 0;
463 virtual void visit(
T4) = 0;
464 virtual void visit(
T5) = 0;
465 virtual void visit(
T6) = 0;
466 virtual void visit(
T7) = 0;
474 template <
typename T1,
typename T2,
typename T3,
typename T4,
475 typename T5,
typename T6>
482 virtual void visit(
T1) = 0;
483 virtual void visit(
T2) = 0;
484 virtual void visit(
T3) = 0;
485 virtual void visit(
T4) = 0;
486 virtual void visit(
T5) = 0;
487 virtual void visit(
T6) = 0;
495 template <
typename T1,
typename T2,
typename T3,
typename T4,
503 virtual void visit(
T1) = 0;
504 virtual void visit(
T2) = 0;
505 virtual void visit(
T3) = 0;
506 virtual void visit(
T4) = 0;
507 virtual void visit(
T5) = 0;
515 template <
typename T1,
typename T2,
typename T3,
typename T4>
522 virtual void visit(
T1) = 0;
523 virtual void visit(
T2) = 0;
524 virtual void visit(
T3) = 0;
525 virtual void visit(
T4) = 0;
533 template <
typename T1,
typename T2,
typename T3>
540 virtual void visit(
T1) = 0;
541 virtual void visit(
T2) = 0;
542 virtual void visit(
T3) = 0;
550 template <
typename T1,
typename T2>
557 virtual void visit(
T1) = 0;
558 virtual void visit(
T2) = 0;
566 template <
typename T1>
573 virtual void visit(
T1) = 0;
582 template <
typename T>
592 template <
typename T>
bitset_ext
Definition absolute.h:38
Definition type_traits_generator.h:844
pair holds two objects of arbitrary type
Definition utility.h:164