12ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Copyright 2010 The RE2 Authors.  All Rights Reserved.
22ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// Use of this source code is governed by a BSD-style
32ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson// license that can be found in the LICENSE file.
42ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
52ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#ifndef RE2_VARIADIC_FUNCTION_H_
62ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#define RE2_VARIADIC_FUNCTION_H_
72ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
82ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonnamespace re2 {
92ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsontemplate <typename Result, typename Param0, typename Param1, typename Arg,
112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson          Result (*Func)(Param0, Param1, const Arg* const [], int count)>
122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonclass VariadicFunction2 {
132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson public:
142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  VariadicFunction2() {}
152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1) const {
172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, 0, 0);
182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0) const {
212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0 };
222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 1);
232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1) const {
262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1 };
272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 2);
282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2) const {
322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2 };
332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 3);
342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3) const {
382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3 };
392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 4);
402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4) const {
442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4 };
452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 5);
462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
472ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
482ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
492ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5) const {
502ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5 };
512ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 6);
522ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
532ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
542ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
552ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
562ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6) const {
572ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6 };
582ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 7);
592ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
602ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
612ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
622ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
632ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7) const {
642ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7 };
652ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 8);
662ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
672ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
682ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
692ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
702ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8) const {
712ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8 };
722ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 9);
732ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
742ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
752ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
762ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
772ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9) const {
782ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
792ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9 };
802ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 10);
812ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
822ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
832ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
842ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
852ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
862ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10) const {
872ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
882ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10 };
892ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 11);
902ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
912ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
922ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
932ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
942ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
952ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11) const {
962ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
972ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11 };
982ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 12);
992ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1002ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1012ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1022ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1032ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1042ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12) const {
1052ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1062ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12 };
1072ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 13);
1082ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1092ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13) const {
1142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13 };
1162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 14);
1172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14) const {
1242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14 };
1262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 15);
1272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15) const {
1342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15 };
1362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 16);
1372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16) const {
1442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16 };
1462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 17);
1472ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1482ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1492ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1502ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1512ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1522ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1532ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17) const {
1542ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1552ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17 };
1562ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 18);
1572ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1582ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1592ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1602ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1612ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1622ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1632ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
1642ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18) const {
1652ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1662ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18 };
1672ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 19);
1682ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1692ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1702ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1712ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1722ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1732ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1742ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
1752ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19) const {
1762ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1772ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19 };
1782ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 20);
1792ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1802ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1812ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1822ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1832ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1842ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1852ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
1862ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20) const {
1872ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
1882ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19,
1892ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a20 };
1902ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 21);
1912ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
1922ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
1932ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
1942ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
1952ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
1962ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
1972ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
1982ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21) const {
1992ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2002ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2012ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21 };
2022ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 22);
2032ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2042ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2052ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2062ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2072ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2082ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2092ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22) const {
2122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22 };
2152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 23);
2162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23) const {
2252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23 };
2282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 24);
2292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24) const {
2382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24 };
2412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 25);
2422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2472ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2482ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2492ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2502ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25) const {
2512ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2522ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2532ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25 };
2542ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 26);
2552ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2562ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2572ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2582ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2592ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2602ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2612ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2622ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2632ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25,
2642ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a26) const {
2652ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2662ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2672ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25, &a26 };
2682ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 27);
2692ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2702ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2712ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2722ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2732ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2742ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2752ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2762ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2772ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25,
2782ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a26, const Arg& a27) const {
2792ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2802ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2812ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25, &a26, &a27 };
2822ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 28);
2832ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2842ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2852ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
2862ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
2872ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
2882ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
2892ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
2902ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
2912ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25,
2922ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a26, const Arg& a27, const Arg& a28) const {
2932ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
2942ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
2952ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28 };
2962ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 29);
2972ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
2982ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
2992ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
3002ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
3012ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
3022ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
3032ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
3042ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
3052ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25,
3062ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a26, const Arg& a27, const Arg& a28, const Arg& a29) const {
3072ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
3082ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
3092ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28, &a29 };
3102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 30);
3112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
3122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
3132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
3142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
3152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
3162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
3172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
3182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
3192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25,
3202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a26, const Arg& a27, const Arg& a28, const Arg& a29,
3212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a30) const {
3222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
3232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
3242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28, &a29, &a30 };
3252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 31);
3262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
3272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
3282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  Result operator()(Param0 p0, Param1 p1, const Arg& a0, const Arg& a1,
3292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a2, const Arg& a3, const Arg& a4, const Arg& a5,
3302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a6, const Arg& a7, const Arg& a8, const Arg& a9,
3312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a10, const Arg& a11, const Arg& a12, const Arg& a13,
3322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a14, const Arg& a15, const Arg& a16, const Arg& a17,
3332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a18, const Arg& a19, const Arg& a20, const Arg& a21,
3342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a22, const Arg& a23, const Arg& a24, const Arg& a25,
3352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a26, const Arg& a27, const Arg& a28, const Arg& a29,
3362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson      const Arg& a30, const Arg& a31) const {
3372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    const Arg* const args[] = { &a0, &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8,
3382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a9, &a10, &a11, &a12, &a13, &a14, &a15, &a16, &a17, &a18, &a19, &a20,
3392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson        &a21, &a22, &a23, &a24, &a25, &a26, &a27, &a28, &a29, &a30, &a31 };
3402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson    return Func(p0, p1, args, 32);
3412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson  }
3422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson};
3432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
3442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson}  // namespace re2
3452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson
3462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#endif  // RE2_VARIADIC_FUNCTION_H_
347