constexpr auto callByIdx()

in src/common/utils/TypeTraits.h [142:275]


constexpr auto callByIdx(auto &&f, size_t idx) {
  switch (idx) {
    case 0:
      if constexpr (0 < std::tuple_size_v<T>) return f(std::tuple_element_t<0, T>{});
    case 1:
      if constexpr (1 < std::tuple_size_v<T>) return f(std::tuple_element_t<1, T>{});
    case 2:
      if constexpr (2 < std::tuple_size_v<T>) return f(std::tuple_element_t<2, T>{});
    case 3:
      if constexpr (3 < std::tuple_size_v<T>) return f(std::tuple_element_t<3, T>{});
    case 4:
      if constexpr (4 < std::tuple_size_v<T>) return f(std::tuple_element_t<4, T>{});
    case 5:
      if constexpr (5 < std::tuple_size_v<T>) return f(std::tuple_element_t<5, T>{});
    case 6:
      if constexpr (6 < std::tuple_size_v<T>) return f(std::tuple_element_t<6, T>{});
    case 7:
      if constexpr (7 < std::tuple_size_v<T>) return f(std::tuple_element_t<7, T>{});
    case 8:
      if constexpr (8 < std::tuple_size_v<T>) return f(std::tuple_element_t<8, T>{});
    case 9:
      if constexpr (9 < std::tuple_size_v<T>) return f(std::tuple_element_t<9, T>{});
    case 10:
      if constexpr (10 < std::tuple_size_v<T>) return f(std::tuple_element_t<10, T>{});
    case 11:
      if constexpr (11 < std::tuple_size_v<T>) return f(std::tuple_element_t<11, T>{});
    case 12:
      if constexpr (12 < std::tuple_size_v<T>) return f(std::tuple_element_t<12, T>{});
    case 13:
      if constexpr (13 < std::tuple_size_v<T>) return f(std::tuple_element_t<13, T>{});
    case 14:
      if constexpr (14 < std::tuple_size_v<T>) return f(std::tuple_element_t<14, T>{});
    case 15:
      if constexpr (15 < std::tuple_size_v<T>) return f(std::tuple_element_t<15, T>{});
    case 16:
      if constexpr (16 < std::tuple_size_v<T>) return f(std::tuple_element_t<16, T>{});
    case 17:
      if constexpr (17 < std::tuple_size_v<T>) return f(std::tuple_element_t<17, T>{});
    case 18:
      if constexpr (18 < std::tuple_size_v<T>) return f(std::tuple_element_t<18, T>{});
    case 19:
      if constexpr (19 < std::tuple_size_v<T>) return f(std::tuple_element_t<19, T>{});
    case 20:
      if constexpr (20 < std::tuple_size_v<T>) return f(std::tuple_element_t<20, T>{});
    case 21:
      if constexpr (21 < std::tuple_size_v<T>) return f(std::tuple_element_t<21, T>{});
    case 22:
      if constexpr (22 < std::tuple_size_v<T>) return f(std::tuple_element_t<22, T>{});
    case 23:
      if constexpr (23 < std::tuple_size_v<T>) return f(std::tuple_element_t<23, T>{});
    case 24:
      if constexpr (24 < std::tuple_size_v<T>) return f(std::tuple_element_t<24, T>{});
    case 25:
      if constexpr (25 < std::tuple_size_v<T>) return f(std::tuple_element_t<25, T>{});
    case 26:
      if constexpr (26 < std::tuple_size_v<T>) return f(std::tuple_element_t<26, T>{});
    case 27:
      if constexpr (27 < std::tuple_size_v<T>) return f(std::tuple_element_t<27, T>{});
    case 28:
      if constexpr (28 < std::tuple_size_v<T>) return f(std::tuple_element_t<28, T>{});
    case 29:
      if constexpr (29 < std::tuple_size_v<T>) return f(std::tuple_element_t<29, T>{});
    case 30:
      if constexpr (30 < std::tuple_size_v<T>) return f(std::tuple_element_t<30, T>{});
    case 31:
      if constexpr (31 < std::tuple_size_v<T>) return f(std::tuple_element_t<31, T>{});
    case 32:
      if constexpr (32 < std::tuple_size_v<T>) return f(std::tuple_element_t<32, T>{});
    case 33:
      if constexpr (33 < std::tuple_size_v<T>) return f(std::tuple_element_t<33, T>{});
    case 34:
      if constexpr (34 < std::tuple_size_v<T>) return f(std::tuple_element_t<34, T>{});
    case 35:
      if constexpr (35 < std::tuple_size_v<T>) return f(std::tuple_element_t<35, T>{});
    case 36:
      if constexpr (36 < std::tuple_size_v<T>) return f(std::tuple_element_t<36, T>{});
    case 37:
      if constexpr (37 < std::tuple_size_v<T>) return f(std::tuple_element_t<37, T>{});
    case 38:
      if constexpr (38 < std::tuple_size_v<T>) return f(std::tuple_element_t<38, T>{});
    case 39:
      if constexpr (39 < std::tuple_size_v<T>) return f(std::tuple_element_t<39, T>{});
    case 40:
      if constexpr (40 < std::tuple_size_v<T>) return f(std::tuple_element_t<40, T>{});
    case 41:
      if constexpr (41 < std::tuple_size_v<T>) return f(std::tuple_element_t<41, T>{});
    case 42:
      if constexpr (42 < std::tuple_size_v<T>) return f(std::tuple_element_t<42, T>{});
    case 43:
      if constexpr (43 < std::tuple_size_v<T>) return f(std::tuple_element_t<43, T>{});
    case 44:
      if constexpr (44 < std::tuple_size_v<T>) return f(std::tuple_element_t<44, T>{});
    case 45:
      if constexpr (45 < std::tuple_size_v<T>) return f(std::tuple_element_t<45, T>{});
    case 46:
      if constexpr (46 < std::tuple_size_v<T>) return f(std::tuple_element_t<46, T>{});
    case 47:
      if constexpr (47 < std::tuple_size_v<T>) return f(std::tuple_element_t<47, T>{});
    case 48:
      if constexpr (48 < std::tuple_size_v<T>) return f(std::tuple_element_t<48, T>{});
    case 49:
      if constexpr (49 < std::tuple_size_v<T>) return f(std::tuple_element_t<49, T>{});
    case 50:
      if constexpr (50 < std::tuple_size_v<T>) return f(std::tuple_element_t<50, T>{});
    case 51:
      if constexpr (51 < std::tuple_size_v<T>) return f(std::tuple_element_t<51, T>{});
    case 52:
      if constexpr (52 < std::tuple_size_v<T>) return f(std::tuple_element_t<52, T>{});
    case 53:
      if constexpr (53 < std::tuple_size_v<T>) return f(std::tuple_element_t<53, T>{});
    case 54:
      if constexpr (54 < std::tuple_size_v<T>) return f(std::tuple_element_t<54, T>{});
    case 55:
      if constexpr (55 < std::tuple_size_v<T>) return f(std::tuple_element_t<55, T>{});
    case 56:
      if constexpr (56 < std::tuple_size_v<T>) return f(std::tuple_element_t<56, T>{});
    case 57:
      if constexpr (57 < std::tuple_size_v<T>) return f(std::tuple_element_t<57, T>{});
    case 58:
      if constexpr (58 < std::tuple_size_v<T>) return f(std::tuple_element_t<58, T>{});
    case 59:
      if constexpr (59 < std::tuple_size_v<T>) return f(std::tuple_element_t<59, T>{});
    case 60:
      if constexpr (60 < std::tuple_size_v<T>) return f(std::tuple_element_t<60, T>{});
    case 61:
      if constexpr (61 < std::tuple_size_v<T>) return f(std::tuple_element_t<61, T>{});
    case 62:
      if constexpr (62 < std::tuple_size_v<T>) return f(std::tuple_element_t<62, T>{});
    case 63:
      if constexpr (63 < std::tuple_size_v<T>) return f(std::tuple_element_t<63, T>{});
    default:
      return f(nullptr);
  }
}