//===----------------------------------------------------------------------===//
//
// Part of libcu++, the C++ Standard Library for your entire system,
// under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES.
//
//===----------------------------------------------------------------------===//

#ifndef __CCCL_PREPROCESSOR_H
#define __CCCL_PREPROCESSOR_H

// Error when MSVC is used with the traditional preprocessor.
// We can't use `#pragma message` here because MSVC will encounter
// errors and exit before it processes pragma message directives.
#if defined(_MSC_VER) && !defined(__clang__)
#  if (!defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL == 1) \
    && !defined(CCCL_IGNORE_MSVC_TRADITIONAL_PREPROCESSOR_WARNING)
#    error \
MSVC/cl.exe with traditional preprocessor is used. This may lead to unexpected compilation errors. Please \
switch to the standard conforming preprocessor by passing `/Zc:preprocessor` to cl.exe. You can define \
CCCL_IGNORE_MSVC_TRADITIONAL_PREPROCESSOR_WARNING to suppress this warning.
#  endif // !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL == 1
#endif // defined(_MSC_VER) && !defined(__clang__)

#ifdef __has_include
#  define _CCCL_HAS_INCLUDE(_X) __has_include(_X)
#else
#  define _CCCL_HAS_INCLUDE(_X) 0
#endif

#ifdef __COUNTER__
#  define _CCCL_COUNTER() __COUNTER__
#else
#  define _CCCL_COUNTER() __LINE__
#endif

// Convert parameter to string
#define _CCCL_TO_STRING2(_STR) #_STR
#define _CCCL_TO_STRING(_STR)  _CCCL_TO_STRING2(_STR)

#define _CCCL_PP_FIRST(first, ...)      first
#define _CCCL_PP_SECOND(_, second, ...) second
#define _CCCL_PP_THIRD(_1, _2, third)   third

#define _CCCL_PP_EXPAND(...) __VA_ARGS__
#define _CCCL_PP_EAT(...)

#define _CCCL_PP_CAT_(_Xp, ...) _Xp##__VA_ARGS__
#define _CCCL_PP_CAT(_Xp, ...)  _CCCL_PP_CAT_(_Xp, __VA_ARGS__)

#define _CCCL_PP_CAT2_(_Xp, ...) _Xp##__VA_ARGS__
#define _CCCL_PP_CAT2(_Xp, ...)  _CCCL_PP_CAT2_(_Xp, __VA_ARGS__)

#define _CCCL_PP_CAT3_(_Xp, ...) _Xp##__VA_ARGS__
#define _CCCL_PP_CAT3(_Xp, ...)  _CCCL_PP_CAT3_(_Xp, __VA_ARGS__)

#define _CCCL_PP_CAT4_(_Xp, ...) _Xp##__VA_ARGS__
#define _CCCL_PP_CAT4(_Xp, ...)  _CCCL_PP_CAT4_(_Xp, __VA_ARGS__)

#define _CCCL_PP_EVAL_(_Xp, _ARGS) _Xp _ARGS
#define _CCCL_PP_EVAL(_Xp, ...)    _CCCL_PP_EVAL_(_Xp, (__VA_ARGS__))

#define _CCCL_PP_EVAL2_(_Xp, _ARGS) _Xp _ARGS
#define _CCCL_PP_EVAL2(_Xp, ...)    _CCCL_PP_EVAL2_(_Xp, (__VA_ARGS__))

#define _CCCL_PP_CHECK(...)              _CCCL_PP_EXPAND(_CCCL_PP_CHECK_N(__VA_ARGS__, 0, ))
#define _CCCL_PP_CHECK_N(_Xp, _Num, ...) _Num
#define _CCCL_PP_PROBE(_Xp)              _Xp, 1,
#define _CCCL_PP_PROBE_N(_Xp, _Num)      _Xp, _Num,

#define _CCCL_PP_IS_PAREN(_Xp)       _CCCL_PP_CHECK(_CCCL_PP_IS_PAREN_PROBE _Xp)
#define _CCCL_PP_IS_PAREN_PROBE(...) _CCCL_PP_PROBE(~)

#define _CCCL_PP_IIF(_BIT)         _CCCL_PP_CAT_(_CCCL_PP_IIF_, _BIT)
#define _CCCL_PP_IIF_0(_TRUE, ...) __VA_ARGS__
#define _CCCL_PP_IIF_1(_TRUE, ...) _TRUE

#define _CCCL_PP_LPAREN (
#define _CCCL_PP_RPAREN )

#define _CCCL_PP_NOT(_BIT) _CCCL_PP_CAT_(_CCCL_PP_NOT_, _BIT)
#define _CCCL_PP_NOT_0     1
#define _CCCL_PP_NOT_1     0

#define _CCCL_PP_EMPTY()
#define _CCCL_PP_COMMA()        ,
#define _CCCL_PP_LBRACE()       {
#define _CCCL_PP_RBRACE()       }
#define _CCCL_PP_COMMA_IIF(_Xp) _CCCL_PP_IIF(_Xp)(_CCCL_PP_COMMA, _CCCL_PP_EMPTY)()

#define _CCCL_PP_CASE(ARG) _CCCL_PP_PROBE_N(~, ARG)
#define _CCCL_PP_SWITCH(PREFIX, ...) \
  _CCCL_PP_CAT(PREFIX##_CASE_, _CCCP_PP_CASE_LABEL_(PREFIX, __VA_ARGS__))(__VA_ARGS__)
#define _CCCL_PP_SWITCH2(PREFIX, ...) \
  _CCCL_PP_CAT(PREFIX##_CASE_, _CCCP_PP_CASE_LABEL_(PREFIX, __VA_ARGS__))(__VA_ARGS__)
#define _CCCP_PP_CASE_LABEL_(PREFIX, ...) \
  _CCCL_PP_EVAL(_CCCL_PP_CHECK, _CCCL_PP_CAT(PREFIX##_SWITCH_, _CCCL_PP_FIRST(__VA_ARGS__)), DEFAULT, )

#define _CCCL_PP_FOR_EACH(_Mp, ...)                          _CCCL_PP_FOR_EACH_N(_CCCL_PP_COUNT(__VA_ARGS__), _Mp, __VA_ARGS__)
#define _CCCL_PP_FOR_EACH_N(_Np, _Mp, ...)                   _CCCL_PP_CAT2(_CCCL_PP_FOR_EACH_, _Np)(_Mp, __VA_ARGS__)
#define _CCCL_PP_FOR_EACH_1(_Mp, _1)                         _Mp(_1)
#define _CCCL_PP_FOR_EACH_2(_Mp, _1, _2)                     _Mp(_1) _Mp(_2)
#define _CCCL_PP_FOR_EACH_3(_Mp, _1, _2, _3)                 _Mp(_1) _Mp(_2) _Mp(_3)
#define _CCCL_PP_FOR_EACH_4(_Mp, _1, _2, _3, _4)             _Mp(_1) _Mp(_2) _Mp(_3) _Mp(_4)
#define _CCCL_PP_FOR_EACH_5(_Mp, _1, _2, _3, _4, _5)         _Mp(_1) _Mp(_2) _Mp(_3) _Mp(_4) _Mp(_5)
#define _CCCL_PP_FOR_EACH_6(_Mp, _1, _2, _3, _4, _5, _6)     _Mp(_1) _Mp(_2) _Mp(_3) _Mp(_4) _Mp(_5) _Mp(_6)
#define _CCCL_PP_FOR_EACH_7(_Mp, _1, _2, _3, _4, _5, _6, _7) _Mp(_1) _Mp(_2) _Mp(_3) _Mp(_4) _Mp(_5) _Mp(_6) _Mp(_7)
#define _CCCL_PP_FOR_EACH_8(_Mp, _1, _2, _3, _4, _5, _6, _7, _8) \
  _Mp(_1) _Mp(_2) _Mp(_3) _Mp(_4) _Mp(_5) _Mp(_6) _Mp(_7) _Mp(_8)
#define _CCCL_PP_FOR_EACH_9(_Mp, _1, _2, _3, _4, _5, _6, _7, _8, _9) \
  _Mp(_1) _Mp(_2) _Mp(_3) _Mp(_4) _Mp(_5) _Mp(_6) _Mp(_7) _Mp(_8) _Mp(_9)

#define _CCCL_PP_PROBE_EMPTY_PROBE__CCCL_PP_PROBE_EMPTY _CCCL_PP_PROBE(~)

#define _CCCL_PP_PROBE_EMPTY()
#define _CCCL_PP_IS_NOT_EMPTY(...)                                                                             \
  _CCCL_PP_EVAL(_CCCL_PP_CHECK, _CCCL_PP_CAT(_CCCL_PP_PROBE_EMPTY_PROBE_, _CCCL_PP_PROBE_EMPTY __VA_ARGS__())) \
  /**/

#define _CCCL_PP_TAIL(_, ...) __VA_ARGS__

///////////////////////////////////////////////////////////////////////////////

// Count the number of arguments. There must be at least one argument and fewer
// than 126 arguments.
// clang-format off
#define _CCCL_PP_COUNT_IMPL(                                                                      \
  _125, _124, _123, _122, _121, _120, _119, _118, _117, _116, _115, _114, _113, _112, _111, _110, \
  _109, _108, _107, _106, _105, _104, _103, _102, _101, _100, _99, _98, _97, _96, _95, _94,       \
  _93, _92, _91, _90, _89, _88, _87, _86, _85, _84, _83, _82, _81, _80, _79, _78,                 \
  _77, _76, _75, _74, _73, _72, _71, _70, _69, _68, _67, _66, _65, _64, _63, _62,                 \
  _61, _60, _59, _58, _57, _56, _55, _54, _53, _52, _51, _50, _49, _48, _47, _46,                 \
  _45, _44, _43, _42, _41, _40, _39, _38, _37, _36, _35, _34, _33, _32, _31, _30,                 \
  _29, _28, _27, _26, _25, _24, _23, _22, _21, _20, _19, _18, _17, _16, _15, _14,                 \
  _13, _12, _11, _10, _9, _8, _7, _6, _5, _4, _3, _2, _1, _0, ...) _0

#define _CCCL_PP_COUNT(...)                                                         \
  _CCCL_PP_EXPAND(_CCCL_PP_COUNT_IMPL( __VA_ARGS__,                                 \
    125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, \
    109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94,       \
    93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78,                 \
    77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62,                 \
    61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46,                 \
    45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30,                 \
    29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14,                 \
    13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
// clang-format on

///////////////////////////////////////////////////////////////////////////////

#define _CCCL_PP_INC(_X) _CCCL_PP_INC_IMPL0(_X)

#define _CCCL_PP_INC_IMPL0(_X) _CCCL_PP_CAT(_CCCL_PP_INC_IMPL_TAG, _X)

#define _CCCL_PP_INC_IMPL_TAG0   1
#define _CCCL_PP_INC_IMPL_TAG1   2
#define _CCCL_PP_INC_IMPL_TAG2   3
#define _CCCL_PP_INC_IMPL_TAG3   4
#define _CCCL_PP_INC_IMPL_TAG4   5
#define _CCCL_PP_INC_IMPL_TAG5   6
#define _CCCL_PP_INC_IMPL_TAG6   7
#define _CCCL_PP_INC_IMPL_TAG7   8
#define _CCCL_PP_INC_IMPL_TAG8   9
#define _CCCL_PP_INC_IMPL_TAG9   10
#define _CCCL_PP_INC_IMPL_TAG10  11
#define _CCCL_PP_INC_IMPL_TAG11  12
#define _CCCL_PP_INC_IMPL_TAG12  13
#define _CCCL_PP_INC_IMPL_TAG13  14
#define _CCCL_PP_INC_IMPL_TAG14  15
#define _CCCL_PP_INC_IMPL_TAG15  16
#define _CCCL_PP_INC_IMPL_TAG16  17
#define _CCCL_PP_INC_IMPL_TAG17  18
#define _CCCL_PP_INC_IMPL_TAG18  19
#define _CCCL_PP_INC_IMPL_TAG19  20
#define _CCCL_PP_INC_IMPL_TAG20  21
#define _CCCL_PP_INC_IMPL_TAG21  22
#define _CCCL_PP_INC_IMPL_TAG22  23
#define _CCCL_PP_INC_IMPL_TAG23  24
#define _CCCL_PP_INC_IMPL_TAG24  25
#define _CCCL_PP_INC_IMPL_TAG25  26
#define _CCCL_PP_INC_IMPL_TAG26  27
#define _CCCL_PP_INC_IMPL_TAG27  28
#define _CCCL_PP_INC_IMPL_TAG28  29
#define _CCCL_PP_INC_IMPL_TAG29  30
#define _CCCL_PP_INC_IMPL_TAG30  31
#define _CCCL_PP_INC_IMPL_TAG31  32
#define _CCCL_PP_INC_IMPL_TAG32  33
#define _CCCL_PP_INC_IMPL_TAG33  34
#define _CCCL_PP_INC_IMPL_TAG34  35
#define _CCCL_PP_INC_IMPL_TAG35  36
#define _CCCL_PP_INC_IMPL_TAG36  37
#define _CCCL_PP_INC_IMPL_TAG37  38
#define _CCCL_PP_INC_IMPL_TAG38  39
#define _CCCL_PP_INC_IMPL_TAG39  40
#define _CCCL_PP_INC_IMPL_TAG40  41
#define _CCCL_PP_INC_IMPL_TAG41  42
#define _CCCL_PP_INC_IMPL_TAG42  43
#define _CCCL_PP_INC_IMPL_TAG43  44
#define _CCCL_PP_INC_IMPL_TAG44  45
#define _CCCL_PP_INC_IMPL_TAG45  46
#define _CCCL_PP_INC_IMPL_TAG46  47
#define _CCCL_PP_INC_IMPL_TAG47  48
#define _CCCL_PP_INC_IMPL_TAG48  49
#define _CCCL_PP_INC_IMPL_TAG49  50
#define _CCCL_PP_INC_IMPL_TAG50  51
#define _CCCL_PP_INC_IMPL_TAG51  52
#define _CCCL_PP_INC_IMPL_TAG52  53
#define _CCCL_PP_INC_IMPL_TAG53  54
#define _CCCL_PP_INC_IMPL_TAG54  55
#define _CCCL_PP_INC_IMPL_TAG55  56
#define _CCCL_PP_INC_IMPL_TAG56  57
#define _CCCL_PP_INC_IMPL_TAG57  58
#define _CCCL_PP_INC_IMPL_TAG58  59
#define _CCCL_PP_INC_IMPL_TAG59  60
#define _CCCL_PP_INC_IMPL_TAG60  61
#define _CCCL_PP_INC_IMPL_TAG61  62
#define _CCCL_PP_INC_IMPL_TAG62  63
#define _CCCL_PP_INC_IMPL_TAG63  64
#define _CCCL_PP_INC_IMPL_TAG64  65
#define _CCCL_PP_INC_IMPL_TAG65  66
#define _CCCL_PP_INC_IMPL_TAG66  67
#define _CCCL_PP_INC_IMPL_TAG67  68
#define _CCCL_PP_INC_IMPL_TAG68  69
#define _CCCL_PP_INC_IMPL_TAG69  70
#define _CCCL_PP_INC_IMPL_TAG70  71
#define _CCCL_PP_INC_IMPL_TAG71  72
#define _CCCL_PP_INC_IMPL_TAG72  73
#define _CCCL_PP_INC_IMPL_TAG73  74
#define _CCCL_PP_INC_IMPL_TAG74  75
#define _CCCL_PP_INC_IMPL_TAG75  76
#define _CCCL_PP_INC_IMPL_TAG76  77
#define _CCCL_PP_INC_IMPL_TAG77  78
#define _CCCL_PP_INC_IMPL_TAG78  79
#define _CCCL_PP_INC_IMPL_TAG79  80
#define _CCCL_PP_INC_IMPL_TAG80  81
#define _CCCL_PP_INC_IMPL_TAG81  82
#define _CCCL_PP_INC_IMPL_TAG82  83
#define _CCCL_PP_INC_IMPL_TAG83  84
#define _CCCL_PP_INC_IMPL_TAG84  85
#define _CCCL_PP_INC_IMPL_TAG85  86
#define _CCCL_PP_INC_IMPL_TAG86  87
#define _CCCL_PP_INC_IMPL_TAG87  88
#define _CCCL_PP_INC_IMPL_TAG88  89
#define _CCCL_PP_INC_IMPL_TAG89  90
#define _CCCL_PP_INC_IMPL_TAG90  91
#define _CCCL_PP_INC_IMPL_TAG91  92
#define _CCCL_PP_INC_IMPL_TAG92  93
#define _CCCL_PP_INC_IMPL_TAG93  94
#define _CCCL_PP_INC_IMPL_TAG94  95
#define _CCCL_PP_INC_IMPL_TAG95  96
#define _CCCL_PP_INC_IMPL_TAG96  97
#define _CCCL_PP_INC_IMPL_TAG97  98
#define _CCCL_PP_INC_IMPL_TAG98  99
#define _CCCL_PP_INC_IMPL_TAG99  100
#define _CCCL_PP_INC_IMPL_TAG100 101
#define _CCCL_PP_INC_IMPL_TAG101 102
#define _CCCL_PP_INC_IMPL_TAG102 103
#define _CCCL_PP_INC_IMPL_TAG103 104
#define _CCCL_PP_INC_IMPL_TAG104 105
#define _CCCL_PP_INC_IMPL_TAG105 106
#define _CCCL_PP_INC_IMPL_TAG106 107
#define _CCCL_PP_INC_IMPL_TAG107 108
#define _CCCL_PP_INC_IMPL_TAG108 109
#define _CCCL_PP_INC_IMPL_TAG109 110
#define _CCCL_PP_INC_IMPL_TAG110 111
#define _CCCL_PP_INC_IMPL_TAG111 112
#define _CCCL_PP_INC_IMPL_TAG112 113
#define _CCCL_PP_INC_IMPL_TAG113 114
#define _CCCL_PP_INC_IMPL_TAG114 115
#define _CCCL_PP_INC_IMPL_TAG115 116
#define _CCCL_PP_INC_IMPL_TAG116 117
#define _CCCL_PP_INC_IMPL_TAG117 118
#define _CCCL_PP_INC_IMPL_TAG118 119
#define _CCCL_PP_INC_IMPL_TAG119 120
#define _CCCL_PP_INC_IMPL_TAG120 121
#define _CCCL_PP_INC_IMPL_TAG121 122
#define _CCCL_PP_INC_IMPL_TAG122 123
#define _CCCL_PP_INC_IMPL_TAG123 124
#define _CCCL_PP_INC_IMPL_TAG124 125
#define _CCCL_PP_INC_IMPL_TAG125 126
#define _CCCL_PP_INC_IMPL_TAG126 127
#define _CCCL_PP_INC_IMPL_TAG127 128
#define _CCCL_PP_INC_IMPL_TAG128 129
#define _CCCL_PP_INC_IMPL_TAG129 130
#define _CCCL_PP_INC_IMPL_TAG130 131
#define _CCCL_PP_INC_IMPL_TAG131 132
#define _CCCL_PP_INC_IMPL_TAG132 133
#define _CCCL_PP_INC_IMPL_TAG133 134
#define _CCCL_PP_INC_IMPL_TAG134 135
#define _CCCL_PP_INC_IMPL_TAG135 136
#define _CCCL_PP_INC_IMPL_TAG136 137
#define _CCCL_PP_INC_IMPL_TAG137 138
#define _CCCL_PP_INC_IMPL_TAG138 139
#define _CCCL_PP_INC_IMPL_TAG139 140
#define _CCCL_PP_INC_IMPL_TAG140 141
#define _CCCL_PP_INC_IMPL_TAG141 142
#define _CCCL_PP_INC_IMPL_TAG142 143
#define _CCCL_PP_INC_IMPL_TAG143 144
#define _CCCL_PP_INC_IMPL_TAG144 145
#define _CCCL_PP_INC_IMPL_TAG145 146
#define _CCCL_PP_INC_IMPL_TAG146 147
#define _CCCL_PP_INC_IMPL_TAG147 148
#define _CCCL_PP_INC_IMPL_TAG148 149
#define _CCCL_PP_INC_IMPL_TAG149 150
#define _CCCL_PP_INC_IMPL_TAG150 151
#define _CCCL_PP_INC_IMPL_TAG151 152
#define _CCCL_PP_INC_IMPL_TAG152 153
#define _CCCL_PP_INC_IMPL_TAG153 154
#define _CCCL_PP_INC_IMPL_TAG154 155
#define _CCCL_PP_INC_IMPL_TAG155 156
#define _CCCL_PP_INC_IMPL_TAG156 157
#define _CCCL_PP_INC_IMPL_TAG157 158
#define _CCCL_PP_INC_IMPL_TAG158 159
#define _CCCL_PP_INC_IMPL_TAG159 160
#define _CCCL_PP_INC_IMPL_TAG160 161
#define _CCCL_PP_INC_IMPL_TAG161 162
#define _CCCL_PP_INC_IMPL_TAG162 163
#define _CCCL_PP_INC_IMPL_TAG163 164
#define _CCCL_PP_INC_IMPL_TAG164 165
#define _CCCL_PP_INC_IMPL_TAG165 166
#define _CCCL_PP_INC_IMPL_TAG166 167
#define _CCCL_PP_INC_IMPL_TAG167 168
#define _CCCL_PP_INC_IMPL_TAG168 169
#define _CCCL_PP_INC_IMPL_TAG169 170
#define _CCCL_PP_INC_IMPL_TAG170 171
#define _CCCL_PP_INC_IMPL_TAG171 172
#define _CCCL_PP_INC_IMPL_TAG172 173
#define _CCCL_PP_INC_IMPL_TAG173 174
#define _CCCL_PP_INC_IMPL_TAG174 175
#define _CCCL_PP_INC_IMPL_TAG175 176
#define _CCCL_PP_INC_IMPL_TAG176 177
#define _CCCL_PP_INC_IMPL_TAG177 178
#define _CCCL_PP_INC_IMPL_TAG178 179
#define _CCCL_PP_INC_IMPL_TAG179 180
#define _CCCL_PP_INC_IMPL_TAG180 181
#define _CCCL_PP_INC_IMPL_TAG181 182
#define _CCCL_PP_INC_IMPL_TAG182 183
#define _CCCL_PP_INC_IMPL_TAG183 184
#define _CCCL_PP_INC_IMPL_TAG184 185
#define _CCCL_PP_INC_IMPL_TAG185 186
#define _CCCL_PP_INC_IMPL_TAG186 187
#define _CCCL_PP_INC_IMPL_TAG187 188
#define _CCCL_PP_INC_IMPL_TAG188 189
#define _CCCL_PP_INC_IMPL_TAG189 190
#define _CCCL_PP_INC_IMPL_TAG190 191
#define _CCCL_PP_INC_IMPL_TAG191 192
#define _CCCL_PP_INC_IMPL_TAG192 193
#define _CCCL_PP_INC_IMPL_TAG193 194
#define _CCCL_PP_INC_IMPL_TAG194 195
#define _CCCL_PP_INC_IMPL_TAG195 196
#define _CCCL_PP_INC_IMPL_TAG196 197
#define _CCCL_PP_INC_IMPL_TAG197 198
#define _CCCL_PP_INC_IMPL_TAG198 199
#define _CCCL_PP_INC_IMPL_TAG199 200
#define _CCCL_PP_INC_IMPL_TAG200 201
#define _CCCL_PP_INC_IMPL_TAG201 202
#define _CCCL_PP_INC_IMPL_TAG202 203
#define _CCCL_PP_INC_IMPL_TAG203 204
#define _CCCL_PP_INC_IMPL_TAG204 205
#define _CCCL_PP_INC_IMPL_TAG205 206
#define _CCCL_PP_INC_IMPL_TAG206 207
#define _CCCL_PP_INC_IMPL_TAG207 208
#define _CCCL_PP_INC_IMPL_TAG208 209
#define _CCCL_PP_INC_IMPL_TAG209 210
#define _CCCL_PP_INC_IMPL_TAG210 211
#define _CCCL_PP_INC_IMPL_TAG211 212
#define _CCCL_PP_INC_IMPL_TAG212 213
#define _CCCL_PP_INC_IMPL_TAG213 214
#define _CCCL_PP_INC_IMPL_TAG214 215
#define _CCCL_PP_INC_IMPL_TAG215 216
#define _CCCL_PP_INC_IMPL_TAG216 217
#define _CCCL_PP_INC_IMPL_TAG217 218
#define _CCCL_PP_INC_IMPL_TAG218 219
#define _CCCL_PP_INC_IMPL_TAG219 220
#define _CCCL_PP_INC_IMPL_TAG220 221
#define _CCCL_PP_INC_IMPL_TAG221 222
#define _CCCL_PP_INC_IMPL_TAG222 223
#define _CCCL_PP_INC_IMPL_TAG223 224
#define _CCCL_PP_INC_IMPL_TAG224 225
#define _CCCL_PP_INC_IMPL_TAG225 226
#define _CCCL_PP_INC_IMPL_TAG226 227
#define _CCCL_PP_INC_IMPL_TAG227 228
#define _CCCL_PP_INC_IMPL_TAG228 229
#define _CCCL_PP_INC_IMPL_TAG229 230
#define _CCCL_PP_INC_IMPL_TAG230 231
#define _CCCL_PP_INC_IMPL_TAG231 232
#define _CCCL_PP_INC_IMPL_TAG232 233
#define _CCCL_PP_INC_IMPL_TAG233 234
#define _CCCL_PP_INC_IMPL_TAG234 235
#define _CCCL_PP_INC_IMPL_TAG235 236
#define _CCCL_PP_INC_IMPL_TAG236 237
#define _CCCL_PP_INC_IMPL_TAG237 238
#define _CCCL_PP_INC_IMPL_TAG238 239
#define _CCCL_PP_INC_IMPL_TAG239 240
#define _CCCL_PP_INC_IMPL_TAG240 241
#define _CCCL_PP_INC_IMPL_TAG241 242
#define _CCCL_PP_INC_IMPL_TAG242 243
#define _CCCL_PP_INC_IMPL_TAG243 244
#define _CCCL_PP_INC_IMPL_TAG244 245
#define _CCCL_PP_INC_IMPL_TAG245 246
#define _CCCL_PP_INC_IMPL_TAG246 247
#define _CCCL_PP_INC_IMPL_TAG247 248
#define _CCCL_PP_INC_IMPL_TAG248 249
#define _CCCL_PP_INC_IMPL_TAG249 250
#define _CCCL_PP_INC_IMPL_TAG250 251
#define _CCCL_PP_INC_IMPL_TAG251 252
#define _CCCL_PP_INC_IMPL_TAG252 253
#define _CCCL_PP_INC_IMPL_TAG253 254
#define _CCCL_PP_INC_IMPL_TAG254 255
#define _CCCL_PP_INC_IMPL_TAG255 256
#define _CCCL_PP_INC_IMPL_TAG256 257

#define _CCCL_PP_DEC(_X) _CCCL_PP_DEC_IMPL0(_X)

#define _CCCL_PP_DEC_IMPL0(_X) _CCCL_PP_CAT(_CCCL_PP_DEC_IMPL_TAG, _X)

#define _CCCL_PP_DEC_IMPL_TAG0   ~##~ // This will generate a syntax error
#define _CCCL_PP_DEC_IMPL_TAG1   0
#define _CCCL_PP_DEC_IMPL_TAG2   1
#define _CCCL_PP_DEC_IMPL_TAG3   2
#define _CCCL_PP_DEC_IMPL_TAG4   3
#define _CCCL_PP_DEC_IMPL_TAG5   4
#define _CCCL_PP_DEC_IMPL_TAG6   5
#define _CCCL_PP_DEC_IMPL_TAG7   6
#define _CCCL_PP_DEC_IMPL_TAG8   7
#define _CCCL_PP_DEC_IMPL_TAG9   8
#define _CCCL_PP_DEC_IMPL_TAG10  9
#define _CCCL_PP_DEC_IMPL_TAG11  10
#define _CCCL_PP_DEC_IMPL_TAG12  11
#define _CCCL_PP_DEC_IMPL_TAG13  12
#define _CCCL_PP_DEC_IMPL_TAG14  13
#define _CCCL_PP_DEC_IMPL_TAG15  14
#define _CCCL_PP_DEC_IMPL_TAG16  15
#define _CCCL_PP_DEC_IMPL_TAG17  16
#define _CCCL_PP_DEC_IMPL_TAG18  17
#define _CCCL_PP_DEC_IMPL_TAG19  18
#define _CCCL_PP_DEC_IMPL_TAG20  19
#define _CCCL_PP_DEC_IMPL_TAG21  20
#define _CCCL_PP_DEC_IMPL_TAG22  21
#define _CCCL_PP_DEC_IMPL_TAG23  22
#define _CCCL_PP_DEC_IMPL_TAG24  23
#define _CCCL_PP_DEC_IMPL_TAG25  24
#define _CCCL_PP_DEC_IMPL_TAG26  25
#define _CCCL_PP_DEC_IMPL_TAG27  26
#define _CCCL_PP_DEC_IMPL_TAG28  27
#define _CCCL_PP_DEC_IMPL_TAG29  28
#define _CCCL_PP_DEC_IMPL_TAG30  29
#define _CCCL_PP_DEC_IMPL_TAG31  30
#define _CCCL_PP_DEC_IMPL_TAG32  31
#define _CCCL_PP_DEC_IMPL_TAG33  32
#define _CCCL_PP_DEC_IMPL_TAG34  33
#define _CCCL_PP_DEC_IMPL_TAG35  34
#define _CCCL_PP_DEC_IMPL_TAG36  35
#define _CCCL_PP_DEC_IMPL_TAG37  36
#define _CCCL_PP_DEC_IMPL_TAG38  37
#define _CCCL_PP_DEC_IMPL_TAG39  38
#define _CCCL_PP_DEC_IMPL_TAG40  39
#define _CCCL_PP_DEC_IMPL_TAG41  40
#define _CCCL_PP_DEC_IMPL_TAG42  41
#define _CCCL_PP_DEC_IMPL_TAG43  42
#define _CCCL_PP_DEC_IMPL_TAG44  43
#define _CCCL_PP_DEC_IMPL_TAG45  44
#define _CCCL_PP_DEC_IMPL_TAG46  45
#define _CCCL_PP_DEC_IMPL_TAG47  46
#define _CCCL_PP_DEC_IMPL_TAG48  47
#define _CCCL_PP_DEC_IMPL_TAG49  48
#define _CCCL_PP_DEC_IMPL_TAG50  49
#define _CCCL_PP_DEC_IMPL_TAG51  50
#define _CCCL_PP_DEC_IMPL_TAG52  51
#define _CCCL_PP_DEC_IMPL_TAG53  52
#define _CCCL_PP_DEC_IMPL_TAG54  53
#define _CCCL_PP_DEC_IMPL_TAG55  54
#define _CCCL_PP_DEC_IMPL_TAG56  55
#define _CCCL_PP_DEC_IMPL_TAG57  56
#define _CCCL_PP_DEC_IMPL_TAG58  57
#define _CCCL_PP_DEC_IMPL_TAG59  58
#define _CCCL_PP_DEC_IMPL_TAG60  59
#define _CCCL_PP_DEC_IMPL_TAG61  60
#define _CCCL_PP_DEC_IMPL_TAG62  61
#define _CCCL_PP_DEC_IMPL_TAG63  62
#define _CCCL_PP_DEC_IMPL_TAG64  63
#define _CCCL_PP_DEC_IMPL_TAG65  64
#define _CCCL_PP_DEC_IMPL_TAG66  65
#define _CCCL_PP_DEC_IMPL_TAG67  66
#define _CCCL_PP_DEC_IMPL_TAG68  67
#define _CCCL_PP_DEC_IMPL_TAG69  68
#define _CCCL_PP_DEC_IMPL_TAG70  69
#define _CCCL_PP_DEC_IMPL_TAG71  70
#define _CCCL_PP_DEC_IMPL_TAG72  71
#define _CCCL_PP_DEC_IMPL_TAG73  72
#define _CCCL_PP_DEC_IMPL_TAG74  73
#define _CCCL_PP_DEC_IMPL_TAG75  74
#define _CCCL_PP_DEC_IMPL_TAG76  75
#define _CCCL_PP_DEC_IMPL_TAG77  76
#define _CCCL_PP_DEC_IMPL_TAG78  77
#define _CCCL_PP_DEC_IMPL_TAG79  78
#define _CCCL_PP_DEC_IMPL_TAG80  79
#define _CCCL_PP_DEC_IMPL_TAG81  80
#define _CCCL_PP_DEC_IMPL_TAG82  81
#define _CCCL_PP_DEC_IMPL_TAG83  82
#define _CCCL_PP_DEC_IMPL_TAG84  83
#define _CCCL_PP_DEC_IMPL_TAG85  84
#define _CCCL_PP_DEC_IMPL_TAG86  85
#define _CCCL_PP_DEC_IMPL_TAG87  86
#define _CCCL_PP_DEC_IMPL_TAG88  87
#define _CCCL_PP_DEC_IMPL_TAG89  88
#define _CCCL_PP_DEC_IMPL_TAG90  89
#define _CCCL_PP_DEC_IMPL_TAG91  90
#define _CCCL_PP_DEC_IMPL_TAG92  91
#define _CCCL_PP_DEC_IMPL_TAG93  92
#define _CCCL_PP_DEC_IMPL_TAG94  93
#define _CCCL_PP_DEC_IMPL_TAG95  94
#define _CCCL_PP_DEC_IMPL_TAG96  95
#define _CCCL_PP_DEC_IMPL_TAG97  96
#define _CCCL_PP_DEC_IMPL_TAG98  97
#define _CCCL_PP_DEC_IMPL_TAG99  98
#define _CCCL_PP_DEC_IMPL_TAG100 99
#define _CCCL_PP_DEC_IMPL_TAG101 100
#define _CCCL_PP_DEC_IMPL_TAG102 101
#define _CCCL_PP_DEC_IMPL_TAG103 102
#define _CCCL_PP_DEC_IMPL_TAG104 103
#define _CCCL_PP_DEC_IMPL_TAG105 104
#define _CCCL_PP_DEC_IMPL_TAG106 105
#define _CCCL_PP_DEC_IMPL_TAG107 106
#define _CCCL_PP_DEC_IMPL_TAG108 107
#define _CCCL_PP_DEC_IMPL_TAG109 108
#define _CCCL_PP_DEC_IMPL_TAG110 109
#define _CCCL_PP_DEC_IMPL_TAG111 110
#define _CCCL_PP_DEC_IMPL_TAG112 111
#define _CCCL_PP_DEC_IMPL_TAG113 112
#define _CCCL_PP_DEC_IMPL_TAG114 113
#define _CCCL_PP_DEC_IMPL_TAG115 114
#define _CCCL_PP_DEC_IMPL_TAG116 115
#define _CCCL_PP_DEC_IMPL_TAG117 116
#define _CCCL_PP_DEC_IMPL_TAG118 117
#define _CCCL_PP_DEC_IMPL_TAG119 118
#define _CCCL_PP_DEC_IMPL_TAG120 119
#define _CCCL_PP_DEC_IMPL_TAG121 120
#define _CCCL_PP_DEC_IMPL_TAG122 121
#define _CCCL_PP_DEC_IMPL_TAG123 122
#define _CCCL_PP_DEC_IMPL_TAG124 123
#define _CCCL_PP_DEC_IMPL_TAG125 124
#define _CCCL_PP_DEC_IMPL_TAG126 125
#define _CCCL_PP_DEC_IMPL_TAG127 126
#define _CCCL_PP_DEC_IMPL_TAG128 127
#define _CCCL_PP_DEC_IMPL_TAG129 128
#define _CCCL_PP_DEC_IMPL_TAG130 129
#define _CCCL_PP_DEC_IMPL_TAG131 130
#define _CCCL_PP_DEC_IMPL_TAG132 131
#define _CCCL_PP_DEC_IMPL_TAG133 132
#define _CCCL_PP_DEC_IMPL_TAG134 133
#define _CCCL_PP_DEC_IMPL_TAG135 134
#define _CCCL_PP_DEC_IMPL_TAG136 135
#define _CCCL_PP_DEC_IMPL_TAG137 136
#define _CCCL_PP_DEC_IMPL_TAG138 137
#define _CCCL_PP_DEC_IMPL_TAG139 138
#define _CCCL_PP_DEC_IMPL_TAG140 139
#define _CCCL_PP_DEC_IMPL_TAG141 140
#define _CCCL_PP_DEC_IMPL_TAG142 141
#define _CCCL_PP_DEC_IMPL_TAG143 142
#define _CCCL_PP_DEC_IMPL_TAG144 143
#define _CCCL_PP_DEC_IMPL_TAG145 144
#define _CCCL_PP_DEC_IMPL_TAG146 145
#define _CCCL_PP_DEC_IMPL_TAG147 146
#define _CCCL_PP_DEC_IMPL_TAG148 147
#define _CCCL_PP_DEC_IMPL_TAG149 148
#define _CCCL_PP_DEC_IMPL_TAG150 149
#define _CCCL_PP_DEC_IMPL_TAG151 150
#define _CCCL_PP_DEC_IMPL_TAG152 151
#define _CCCL_PP_DEC_IMPL_TAG153 152
#define _CCCL_PP_DEC_IMPL_TAG154 153
#define _CCCL_PP_DEC_IMPL_TAG155 154
#define _CCCL_PP_DEC_IMPL_TAG156 155
#define _CCCL_PP_DEC_IMPL_TAG157 156
#define _CCCL_PP_DEC_IMPL_TAG158 157
#define _CCCL_PP_DEC_IMPL_TAG159 158
#define _CCCL_PP_DEC_IMPL_TAG160 159
#define _CCCL_PP_DEC_IMPL_TAG161 160
#define _CCCL_PP_DEC_IMPL_TAG162 161
#define _CCCL_PP_DEC_IMPL_TAG163 162
#define _CCCL_PP_DEC_IMPL_TAG164 163
#define _CCCL_PP_DEC_IMPL_TAG165 164
#define _CCCL_PP_DEC_IMPL_TAG166 165
#define _CCCL_PP_DEC_IMPL_TAG167 166
#define _CCCL_PP_DEC_IMPL_TAG168 167
#define _CCCL_PP_DEC_IMPL_TAG169 168
#define _CCCL_PP_DEC_IMPL_TAG170 169
#define _CCCL_PP_DEC_IMPL_TAG171 170
#define _CCCL_PP_DEC_IMPL_TAG172 171
#define _CCCL_PP_DEC_IMPL_TAG173 172
#define _CCCL_PP_DEC_IMPL_TAG174 173
#define _CCCL_PP_DEC_IMPL_TAG175 174
#define _CCCL_PP_DEC_IMPL_TAG176 175
#define _CCCL_PP_DEC_IMPL_TAG177 176
#define _CCCL_PP_DEC_IMPL_TAG178 177
#define _CCCL_PP_DEC_IMPL_TAG179 178
#define _CCCL_PP_DEC_IMPL_TAG180 179
#define _CCCL_PP_DEC_IMPL_TAG181 180
#define _CCCL_PP_DEC_IMPL_TAG182 181
#define _CCCL_PP_DEC_IMPL_TAG183 182
#define _CCCL_PP_DEC_IMPL_TAG184 183
#define _CCCL_PP_DEC_IMPL_TAG185 184
#define _CCCL_PP_DEC_IMPL_TAG186 185
#define _CCCL_PP_DEC_IMPL_TAG187 186
#define _CCCL_PP_DEC_IMPL_TAG188 187
#define _CCCL_PP_DEC_IMPL_TAG189 188
#define _CCCL_PP_DEC_IMPL_TAG190 189
#define _CCCL_PP_DEC_IMPL_TAG191 190
#define _CCCL_PP_DEC_IMPL_TAG192 191
#define _CCCL_PP_DEC_IMPL_TAG193 192
#define _CCCL_PP_DEC_IMPL_TAG194 193
#define _CCCL_PP_DEC_IMPL_TAG195 194
#define _CCCL_PP_DEC_IMPL_TAG196 195
#define _CCCL_PP_DEC_IMPL_TAG197 196
#define _CCCL_PP_DEC_IMPL_TAG198 197
#define _CCCL_PP_DEC_IMPL_TAG199 198
#define _CCCL_PP_DEC_IMPL_TAG200 199
#define _CCCL_PP_DEC_IMPL_TAG201 200
#define _CCCL_PP_DEC_IMPL_TAG202 201
#define _CCCL_PP_DEC_IMPL_TAG203 202
#define _CCCL_PP_DEC_IMPL_TAG204 203
#define _CCCL_PP_DEC_IMPL_TAG205 204
#define _CCCL_PP_DEC_IMPL_TAG206 205
#define _CCCL_PP_DEC_IMPL_TAG207 206
#define _CCCL_PP_DEC_IMPL_TAG208 207
#define _CCCL_PP_DEC_IMPL_TAG209 208
#define _CCCL_PP_DEC_IMPL_TAG210 209
#define _CCCL_PP_DEC_IMPL_TAG211 210
#define _CCCL_PP_DEC_IMPL_TAG212 211
#define _CCCL_PP_DEC_IMPL_TAG213 212
#define _CCCL_PP_DEC_IMPL_TAG214 213
#define _CCCL_PP_DEC_IMPL_TAG215 214
#define _CCCL_PP_DEC_IMPL_TAG216 215
#define _CCCL_PP_DEC_IMPL_TAG217 216
#define _CCCL_PP_DEC_IMPL_TAG218 217
#define _CCCL_PP_DEC_IMPL_TAG219 218
#define _CCCL_PP_DEC_IMPL_TAG220 219
#define _CCCL_PP_DEC_IMPL_TAG221 220
#define _CCCL_PP_DEC_IMPL_TAG222 221
#define _CCCL_PP_DEC_IMPL_TAG223 222
#define _CCCL_PP_DEC_IMPL_TAG224 223
#define _CCCL_PP_DEC_IMPL_TAG225 224
#define _CCCL_PP_DEC_IMPL_TAG226 225
#define _CCCL_PP_DEC_IMPL_TAG227 226
#define _CCCL_PP_DEC_IMPL_TAG228 227
#define _CCCL_PP_DEC_IMPL_TAG229 228
#define _CCCL_PP_DEC_IMPL_TAG230 229
#define _CCCL_PP_DEC_IMPL_TAG231 230
#define _CCCL_PP_DEC_IMPL_TAG232 231
#define _CCCL_PP_DEC_IMPL_TAG233 232
#define _CCCL_PP_DEC_IMPL_TAG234 233
#define _CCCL_PP_DEC_IMPL_TAG235 234
#define _CCCL_PP_DEC_IMPL_TAG236 235
#define _CCCL_PP_DEC_IMPL_TAG237 236
#define _CCCL_PP_DEC_IMPL_TAG238 237
#define _CCCL_PP_DEC_IMPL_TAG239 238
#define _CCCL_PP_DEC_IMPL_TAG240 239
#define _CCCL_PP_DEC_IMPL_TAG241 240
#define _CCCL_PP_DEC_IMPL_TAG242 241
#define _CCCL_PP_DEC_IMPL_TAG243 242
#define _CCCL_PP_DEC_IMPL_TAG244 243
#define _CCCL_PP_DEC_IMPL_TAG245 244
#define _CCCL_PP_DEC_IMPL_TAG246 245
#define _CCCL_PP_DEC_IMPL_TAG247 246
#define _CCCL_PP_DEC_IMPL_TAG248 247
#define _CCCL_PP_DEC_IMPL_TAG249 248
#define _CCCL_PP_DEC_IMPL_TAG250 249
#define _CCCL_PP_DEC_IMPL_TAG251 250
#define _CCCL_PP_DEC_IMPL_TAG252 251
#define _CCCL_PP_DEC_IMPL_TAG253 252
#define _CCCL_PP_DEC_IMPL_TAG254 253
#define _CCCL_PP_DEC_IMPL_TAG255 254
#define _CCCL_PP_DEC_IMPL_TAG256 255
#define _CCCL_PP_DEC_IMPL_TAG257 256

////////////////////////////////////////////////////////////////////////////////

// _CCCL_PP_REPEAT(COUNT, MACRO, STATE, INCREMENT)
//
// Expands to: MACRO(STATE) MACRO(INCREMENT(STATE)) ... MACRO(INCREMENT(INCREMENT(INCREMENT(...))))
// STATE defaults to 0, INCREMENT defaults to _CCCL_PP_INC
#define _CCCL_PP_REPEAT_AUX1(_N, _M)         _CCCL_PP_CAT(_CCCL_PP_REPEAT, _N)(_M, 0, _CCCL_PP_INC)
#define _CCCL_PP_REPEAT_AUX2(_N, _M, _S)     _CCCL_PP_CAT(_CCCL_PP_REPEAT, _N)(_M, _S, _CCCL_PP_INC)
#define _CCCL_PP_REPEAT_AUX3(_N, _M, _S, _F) _CCCL_PP_CAT(_CCCL_PP_REPEAT, _N)(_M, _S, _F)

#define _CCCL_PP_REPEAT_AUX(_C, _N, ...) _CCCL_PP_CAT(_CCCL_PP_REPEAT_AUX, _C)(_N, __VA_ARGS__)
#define _CCCL_PP_REPEAT(_N, ...)         _CCCL_PP_REPEAT_AUX(_CCCL_PP_COUNT(__VA_ARGS__), _N, __VA_ARGS__)

#define _CCCL_PP_REPEAT0(_M, _S, _F)
#define _CCCL_PP_REPEAT1(_M, _S, _F)   _M(_S)
#define _CCCL_PP_REPEAT2(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT1(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT3(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT2(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT4(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT3(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT5(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT4(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT6(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT5(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT7(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT6(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT8(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT7(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT9(_M, _S, _F)   _M(_S) _CCCL_PP_REPEAT8(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT10(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT9(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT11(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT10(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT12(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT11(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT13(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT12(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT14(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT13(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT15(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT14(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT16(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT15(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT17(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT16(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT18(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT17(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT19(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT18(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT20(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT19(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT21(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT20(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT22(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT21(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT23(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT22(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT24(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT23(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT25(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT24(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT26(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT25(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT27(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT26(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT28(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT27(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT29(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT28(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT30(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT29(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT31(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT30(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT32(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT31(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT33(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT32(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT34(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT33(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT35(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT34(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT36(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT35(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT37(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT36(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT38(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT37(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT39(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT38(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT40(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT39(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT41(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT40(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT42(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT41(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT43(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT42(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT44(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT43(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT45(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT44(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT46(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT45(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT47(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT46(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT48(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT47(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT49(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT48(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT50(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT49(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT51(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT50(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT52(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT51(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT53(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT52(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT54(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT53(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT55(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT54(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT56(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT55(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT57(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT56(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT58(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT57(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT59(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT58(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT60(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT59(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT61(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT60(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT62(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT61(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT63(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT62(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT64(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT63(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT65(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT64(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT66(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT65(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT67(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT66(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT68(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT67(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT69(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT68(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT70(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT69(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT71(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT70(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT72(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT71(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT73(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT72(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT74(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT73(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT75(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT74(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT76(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT75(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT77(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT76(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT78(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT77(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT79(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT78(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT80(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT79(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT81(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT80(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT82(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT81(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT83(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT82(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT84(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT83(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT85(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT84(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT86(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT85(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT87(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT86(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT88(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT87(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT89(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT88(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT90(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT89(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT91(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT90(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT92(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT91(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT93(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT92(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT94(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT93(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT95(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT94(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT96(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT95(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT97(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT96(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT98(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT97(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT99(_M, _S, _F)  _M(_S) _CCCL_PP_REPEAT98(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT100(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT99(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT101(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT100(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT102(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT101(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT103(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT102(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT104(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT103(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT105(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT104(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT106(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT105(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT107(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT106(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT108(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT107(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT109(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT108(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT110(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT109(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT111(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT110(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT112(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT111(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT113(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT112(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT114(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT113(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT115(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT114(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT116(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT115(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT117(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT116(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT118(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT117(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT119(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT118(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT120(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT119(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT121(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT120(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT122(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT121(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT123(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT122(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT124(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT123(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT125(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT124(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT126(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT125(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT127(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT126(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT128(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT127(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT129(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT128(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT130(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT129(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT131(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT130(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT132(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT131(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT133(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT132(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT134(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT133(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT135(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT134(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT136(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT135(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT137(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT136(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT138(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT137(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT139(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT138(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT140(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT139(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT141(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT140(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT142(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT141(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT143(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT142(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT144(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT143(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT145(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT144(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT146(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT145(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT147(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT146(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT148(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT147(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT149(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT148(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT150(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT149(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT151(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT150(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT152(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT151(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT153(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT152(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT154(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT153(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT155(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT154(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT156(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT155(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT157(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT156(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT158(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT157(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT159(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT158(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT160(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT159(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT161(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT160(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT162(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT161(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT163(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT162(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT164(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT163(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT165(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT164(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT166(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT165(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT167(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT166(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT168(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT167(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT169(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT168(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT170(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT169(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT171(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT170(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT172(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT171(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT173(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT172(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT174(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT173(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT175(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT174(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT176(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT175(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT177(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT176(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT178(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT177(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT179(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT178(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT180(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT179(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT181(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT180(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT182(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT181(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT183(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT182(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT184(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT183(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT185(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT184(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT186(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT185(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT187(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT186(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT188(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT187(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT189(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT188(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT190(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT189(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT191(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT190(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT192(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT191(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT193(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT192(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT194(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT193(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT195(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT194(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT196(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT195(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT197(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT196(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT198(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT197(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT199(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT198(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT200(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT199(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT201(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT200(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT202(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT201(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT203(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT202(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT204(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT203(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT205(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT204(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT206(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT205(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT207(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT206(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT208(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT207(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT209(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT208(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT210(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT209(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT211(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT210(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT212(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT211(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT213(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT212(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT214(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT213(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT215(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT214(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT216(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT215(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT217(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT216(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT218(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT217(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT219(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT218(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT220(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT219(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT221(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT220(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT222(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT221(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT223(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT222(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT224(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT223(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT225(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT224(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT226(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT225(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT227(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT226(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT228(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT227(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT229(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT228(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT230(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT229(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT231(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT230(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT232(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT231(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT233(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT232(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT234(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT233(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT235(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT234(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT236(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT235(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT237(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT236(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT238(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT237(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT239(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT238(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT240(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT239(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT241(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT240(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT242(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT241(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT243(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT242(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT244(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT243(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT245(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT244(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT246(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT245(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT247(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT246(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT248(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT247(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT249(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT248(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT250(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT249(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT251(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT250(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT252(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT251(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT253(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT252(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT254(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT253(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT255(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT254(_M, _F(_S), _F)
#define _CCCL_PP_REPEAT256(_M, _S, _F) _M(_S) _CCCL_PP_REPEAT255(_M, _F(_S), _F)

////////////////////////////////////////////////////////////////////////////////

// _CCCL_PP_REPEAT_REVERSE(COUNT, MACRO, STATE, INCREMENT)
//
// Expands to: MACRO(INCREMENT(INCREMENT(INCREMENT(...)))) ... MACRO(INCREMENT(STATE)) MACRO(STATE)
// STATE defaults to 0, INCREMENT defaults to _CCCL_PP_INC
#define _CCCL_PP_REPEAT_REVERSE_AUX1(_N, _M)         _CCCL_PP_CAT(_CCCL_PP_REPEAT_REVERSE, _N)(_M, 0, _CCCL_PP_INC)
#define _CCCL_PP_REPEAT_REVERSE_AUX2(_N, _M, _S)     _CCCL_PP_CAT(_CCCL_PP_REPEAT_REVERSE, _N)(_M, _S, _CCCL_PP_INC)
#define _CCCL_PP_REPEAT_REVERSE_AUX3(_N, _M, _S, _F) _CCCL_PP_CAT(_CCCL_PP_REPEAT_REVERSE, _N)(_M, _S, _F)

#define _CCCL_PP_REPEAT_REVERSE_AUX(_C, _N, ...) _CCCL_PP_CAT(_CCCL_PP_REPEAT_REVERSE_AUX, _C)(_N, __VA_ARGS__)
#define _CCCL_PP_REPEAT_REVERSE(_N, ...)         _CCCL_PP_REPEAT_REVERSE_AUX(_CCCL_PP_COUNT(__VA_ARGS__), _N, __VA_ARGS__)

#define _CCCL_PP_REPEAT_REVERSE0(_M, _S, _F)
#define _CCCL_PP_REPEAT_REVERSE1(_M, _S, _F)   _M(_S)
#define _CCCL_PP_REPEAT_REVERSE2(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE1(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE3(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE2(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE4(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE3(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE5(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE4(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE6(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE5(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE7(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE6(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE8(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE7(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE9(_M, _S, _F)   _CCCL_PP_REPEAT_REVERSE8(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE10(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE9(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE11(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE10(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE12(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE11(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE13(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE12(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE14(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE13(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE15(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE14(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE16(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE15(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE17(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE16(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE18(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE17(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE19(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE18(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE20(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE19(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE21(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE20(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE22(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE21(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE23(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE22(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE24(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE23(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE25(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE24(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE26(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE25(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE27(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE26(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE28(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE27(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE29(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE28(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE30(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE29(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE31(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE30(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE32(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE31(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE33(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE32(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE34(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE33(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE35(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE34(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE36(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE35(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE37(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE36(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE38(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE37(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE39(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE38(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE40(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE39(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE41(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE40(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE42(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE41(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE43(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE42(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE44(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE43(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE45(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE44(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE46(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE45(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE47(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE46(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE48(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE47(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE49(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE48(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE50(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE49(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE51(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE50(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE52(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE51(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE53(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE52(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE54(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE53(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE55(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE54(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE56(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE55(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE57(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE56(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE58(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE57(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE59(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE58(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE60(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE59(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE61(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE60(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE62(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE61(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE63(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE62(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE64(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE63(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE65(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE64(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE66(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE65(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE67(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE66(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE68(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE67(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE69(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE68(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE70(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE69(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE71(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE70(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE72(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE71(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE73(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE72(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE74(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE73(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE75(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE74(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE76(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE75(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE77(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE76(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE78(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE77(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE79(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE78(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE80(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE79(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE81(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE80(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE82(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE81(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE83(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE82(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE84(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE83(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE85(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE84(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE86(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE85(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE87(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE86(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE88(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE87(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE89(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE88(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE90(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE89(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE91(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE90(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE92(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE91(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE93(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE92(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE94(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE93(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE95(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE94(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE96(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE95(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE97(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE96(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE98(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE97(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE99(_M, _S, _F)  _CCCL_PP_REPEAT_REVERSE98(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE100(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE99(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE101(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE100(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE102(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE101(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE103(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE102(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE104(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE103(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE105(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE104(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE106(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE105(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE107(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE106(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE108(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE107(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE109(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE108(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE110(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE109(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE111(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE110(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE112(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE111(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE113(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE112(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE114(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE113(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE115(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE114(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE116(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE115(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE117(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE116(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE118(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE117(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE119(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE118(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE120(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE119(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE121(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE120(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE122(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE121(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE123(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE122(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE124(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE123(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE125(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE124(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE126(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE125(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE127(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE126(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE128(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE127(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE129(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE128(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE130(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE129(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE131(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE130(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE132(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE131(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE133(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE132(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE134(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE133(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE135(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE134(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE136(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE135(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE137(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE136(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE138(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE137(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE139(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE138(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE140(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE139(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE141(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE140(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE142(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE141(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE143(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE142(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE144(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE143(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE145(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE144(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE146(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE145(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE147(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE146(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE148(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE147(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE149(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE148(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE150(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE149(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE151(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE150(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE152(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE151(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE153(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE152(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE154(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE153(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE155(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE154(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE156(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE155(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE157(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE156(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE158(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE157(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE159(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE158(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE160(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE159(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE161(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE160(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE162(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE161(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE163(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE162(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE164(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE163(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE165(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE164(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE166(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE165(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE167(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE166(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE168(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE167(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE169(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE168(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE170(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE169(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE171(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE170(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE172(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE171(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE173(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE172(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE174(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE173(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE175(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE174(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE176(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE175(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE177(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE176(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE178(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE177(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE179(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE178(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE180(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE179(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE181(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE180(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE182(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE181(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE183(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE182(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE184(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE183(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE185(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE184(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE186(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE185(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE187(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE186(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE188(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE187(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE189(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE188(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE190(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE189(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE191(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE190(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE192(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE191(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE193(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE192(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE194(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE193(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE195(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE194(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE196(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE195(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE197(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE196(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE198(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE197(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE199(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE198(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE200(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE199(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE201(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE200(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE202(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE201(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE203(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE202(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE204(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE203(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE205(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE204(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE206(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE205(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE207(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE206(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE208(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE207(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE209(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE208(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE210(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE209(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE211(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE210(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE212(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE211(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE213(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE212(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE214(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE213(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE215(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE214(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE216(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE215(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE217(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE216(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE218(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE217(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE219(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE218(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE220(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE219(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE221(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE220(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE222(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE221(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE223(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE222(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE224(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE223(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE225(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE224(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE226(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE225(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE227(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE226(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE228(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE227(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE229(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE228(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE230(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE229(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE231(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE230(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE232(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE231(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE233(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE232(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE234(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE233(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE235(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE234(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE236(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE235(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE237(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE236(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE238(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE237(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE239(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE238(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE240(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE239(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE241(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE240(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE242(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE241(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE243(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE242(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE244(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE243(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE245(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE244(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE246(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE245(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE247(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE246(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE248(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE247(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE249(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE248(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE250(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE249(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE251(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE250(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE252(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE251(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE253(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE252(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE254(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE253(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE255(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE254(_M, _F(_S), _F) _M(_S)
#define _CCCL_PP_REPEAT_REVERSE256(_M, _S, _F) _CCCL_PP_REPEAT_REVERSE255(_M, _F(_S), _F) _M(_S)

#define _CCCL_PP_SPLICE_WITH_IMPL1(SEP, P1)       P1
#define _CCCL_PP_SPLICE_WITH_IMPL2(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL1(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL3(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL2(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL4(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL3(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL5(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL4(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL6(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL5(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL7(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL6(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL8(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL7(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL9(SEP, P1, ...)  _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL8(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL10(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL9(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL11(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL10(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL12(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL11(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL13(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL12(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL14(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL13(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL15(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL14(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL16(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL15(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL17(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL16(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL18(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL17(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL19(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL18(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL20(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL19(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL21(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL20(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL22(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL21(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL23(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL22(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL24(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL23(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL25(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL24(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL26(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL25(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL27(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL26(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL28(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL27(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL29(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL28(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL30(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL29(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL31(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL30(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL32(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL31(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL33(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL32(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL34(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL33(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL35(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL34(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL36(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL35(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL37(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL36(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL38(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL37(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL39(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL38(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL40(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL39(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL41(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL40(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL42(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL41(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL43(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL42(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL44(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL43(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL45(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL44(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL46(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL45(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL47(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL46(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL48(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL47(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL49(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL48(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL50(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL49(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL51(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL50(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL52(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL51(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL53(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL52(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL54(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL53(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL55(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL54(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL56(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL55(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL57(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL56(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL58(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL57(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL59(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL58(SEP, __VA_ARGS__))
#define _CCCL_PP_SPLICE_WITH_IMPL60(SEP, P1, ...) _CCCL_PP_CAT(P1##SEP, _CCCL_PP_SPLICE_WITH_IMPL59(SEP, __VA_ARGS__))

#define _CCCL_PP_SPLICE_WITH_IMPL_DISPATCH(N) _CCCL_PP_SPLICE_WITH_IMPL##N

// Splices a pack of arguments into a single token, separated by SEP
// E.g., _CCCL_PP_SPLICE_WITH(_, A, B, C) will evaluate to A_B_C
#define _CCCL_PP_SPLICE_WITH(SEP, ...) \
  _CCCL_PP_EXPAND(_CCCL_PP_EVAL(_CCCL_PP_SPLICE_WITH_IMPL_DISPATCH, _CCCL_PP_COUNT(__VA_ARGS__))(SEP, __VA_ARGS__))

#endif // __CCCL_PREPROCESSOR_H
