diff --git a/libcudacxx/include/cuda/std/__cccl/preprocessor.h b/libcudacxx/include/cuda/std/__cccl/preprocessor.h index b3e67069fa5..a8f6cbbfd96 100644 --- a/libcudacxx/include/cuda/std/__cccl/preprocessor.h +++ b/libcudacxx/include/cuda/std/__cccl/preprocessor.h @@ -34,9 +34,9 @@ CCCL_IGNORE_MSVC_TRADITIONAL_PREPROCESSOR_WARNING to suppress this warning. #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_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(...) @@ -84,13 +84,13 @@ CCCL_IGNORE_MSVC_TRADITIONAL_PREPROCESSOR_WARNING to suppress this warning. #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_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__)), _CCCL_SWITCH_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__) @@ -1236,72 +1236,131 @@ CCCL_IGNORE_MSVC_TRADITIONAL_PREPROCESSOR_WARNING to suppress this warning. #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_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 +#define _CCCL_PP_SPLICE_WITH_IMPL_DISPATCH(_NUM) _CCCL_PP_SPLICE_WITH_IMPL##_NUM -// Splices a pack of arguments into a single token, separated by SEP +// 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__)) +#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 diff --git a/libcudacxx/include/cuda/std/__concepts/concept_macros.h b/libcudacxx/include/cuda/std/__concepts/concept_macros.h index bcf594eca36..c821e022b1c 100644 --- a/libcudacxx/include/cuda/std/__concepts/concept_macros.h +++ b/libcudacxx/include/cuda/std/__concepts/concept_macros.h @@ -149,11 +149,11 @@ namespace __cccl_unqualified_cuda_std = ::cuda::std; // NOLINT(misc-unused-alias // - _Satisfies(CONCEPT...) EXPR... // // The last 4 are handled below: -#define _CCCL_CONCEPT_REQUIREMENT_SWITCH_requires _CCCL_PP_CASE(REQUIRES) -#define _CCCL_CONCEPT_REQUIREMENT_SWITCH_noexcept _CCCL_PP_CASE(NOEXCEPT) -#define _CCCL_CONCEPT_REQUIREMENT_SWITCH_typename _CCCL_PP_CASE(TYPENAME) -#define _CCCL_CONCEPT_REQUIREMENT_SWITCH__Same_as _CCCL_PP_CASE(SAME_AS) -#define _CCCL_CONCEPT_REQUIREMENT_SWITCH__Satisfies _CCCL_PP_CASE(SATISFIES) +#define _CCCL_CONCEPT_REQUIREMENT_SWITCH_requires _CCCL_PP_CASE(_CCCL_SWITCH_REQUIRES) +#define _CCCL_CONCEPT_REQUIREMENT_SWITCH_noexcept _CCCL_PP_CASE(_CCCL_SWITCH_NOEXCEPT) +#define _CCCL_CONCEPT_REQUIREMENT_SWITCH_typename _CCCL_PP_CASE(_CCCL_SWITCH_TYPENAME) +#define _CCCL_CONCEPT_REQUIREMENT_SWITCH__Same_as _CCCL_PP_CASE(_CCCL_SWITCH_SAME_AS) +#define _CCCL_CONCEPT_REQUIREMENT_SWITCH__Satisfies _CCCL_PP_CASE(_CCCL_SWITCH_SATISFIES) // Converts "requires(ARGS...)" to "ARGS..." #define _CCCL_CONCEPT_EAT_REQUIRES_(...) _CCCL_PP_CAT(_CCCL_CONCEPT_EAT_REQUIRES_, __VA_ARGS__) @@ -168,10 +168,10 @@ namespace __cccl_unqualified_cuda_std = ::cuda::std; // NOLINT(misc-unused-alias #define _CCCL_CONCEPT_EAT_TYPENAME_typename(...) __VA_ARGS__ // Converts "[typename]opt TYPE..." to "typename TYPE..." -#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_(...) _CCCL_PP_SWITCH2(_CCCL_CONCEPT_TRY_ADD_TYPENAME, __VA_ARGS__) -#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_SWITCH_typename _CCCL_PP_CASE(TYPENAME) -#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_CASE_DEFAULT(...) typename __VA_ARGS__ -#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_CASE_TYPENAME(...) __VA_ARGS__ +#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_(...) _CCCL_PP_SWITCH2(_CCCL_CONCEPT_TRY_ADD_TYPENAME, __VA_ARGS__) +#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_SWITCH_typename _CCCL_PP_CASE(_CCCL_SWITCH_TYPENAME) +#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_CASE__CCCL_SWITCH_DEFAULT(...) typename __VA_ARGS__ +#define _CCCL_CONCEPT_TRY_ADD_TYPENAME_CASE__CCCL_SWITCH_TYPENAME(...) __VA_ARGS__ // Converts "_Same_as(TYPE) EXPR..." to "EXPR..." #define _CCCL_CONCEPT_EAT_SAME_AS_(...) _CCCL_PP_CAT(_CCCL_CONCEPT_EAT_SAME_AS_, __VA_ARGS__) @@ -213,14 +213,15 @@ namespace __cccl_unqualified_cuda_std = ::cuda::std; // NOLINT(misc-unused-alias (_REQ); // The following macros handle the various special forms of requirements: -# define _CCCL_CONCEPT_REQUIREMENT_CASE_DEFAULT(_REQ) _REQ -# define _CCCL_CONCEPT_REQUIREMENT_CASE_REQUIRES(_REQ) requires _CCCL_CONCEPT_EAT_REQUIRES_(_REQ) -# define _CCCL_CONCEPT_REQUIREMENT_CASE_NOEXCEPT(_REQ) _CCCL_PP_EXPAND({ _CCCL_CONCEPT_EAT_NOEXCEPT_(_REQ) } noexcept) -# define _CCCL_CONCEPT_REQUIREMENT_CASE_TYPENAME(_REQ) \ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_DEFAULT(_REQ) _REQ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_REQUIRES(_REQ) requires _CCCL_CONCEPT_EAT_REQUIRES_(_REQ) +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_NOEXCEPT(_REQ) \ + _CCCL_PP_EXPAND({ _CCCL_CONCEPT_EAT_NOEXCEPT_(_REQ) } noexcept) +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_TYPENAME(_REQ) \ _CCCL_CONCEPT_TRY_ADD_TYPENAME_(_CCCL_CONCEPT_EAT_TYPENAME_(_REQ)) -# define _CCCL_CONCEPT_REQUIREMENT_CASE_SAME_AS(_REQ) \ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_SAME_AS(_REQ) \ {_CCCL_CONCEPT_EAT_SAME_AS_(_REQ)}->_CCCL_CONCEPT_VSTD::same_as<_CCCL_CONCEPT_GET_TYPE_FROM_SAME_AS_(_REQ)> -# define _CCCL_CONCEPT_REQUIREMENT_CASE_SATISFIES(_REQ) \ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_SATISFIES(_REQ) \ {_CCCL_CONCEPT_EAT_SATISFIES_(_REQ)}->_CCCL_CONCEPT_GET_CONCEPT_FROM_SATISFIES_(_REQ) # define _CCCL_FRAGMENT(_NAME, ...) _NAME<__VA_ARGS__> @@ -259,14 +260,15 @@ namespace __cccl_unqualified_cuda_std = ::cuda::std; // NOLINT(misc-unused-alias void(), _CCCL_PP_CAT(_CCCL_CONCEPT_REQUIREMENT_, _CCCL_PP_IS_PAREN(_REQ))(_REQ), // The following macros handle the various special forms of requirements: -# define _CCCL_CONCEPT_REQUIREMENT_CASE_DEFAULT(_REQ) _CCCL_CONCEPT_IGNORE_RESULT_(_REQ) -# define _CCCL_CONCEPT_REQUIREMENT_CASE_REQUIRES(_REQ) ::__cccl_requires<_CCCL_CONCEPT_EAT_REQUIRES_(_REQ)> -# define _CCCL_CONCEPT_REQUIREMENT_CASE_NOEXCEPT(_REQ) _CCCL_CONCEPT_NOEXCEPT_REQUIREMENT_(_REQ) -# define _CCCL_CONCEPT_REQUIREMENT_CASE_TYPENAME(_REQ) \ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_DEFAULT(_REQ) _CCCL_CONCEPT_IGNORE_RESULT_(_REQ) +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_REQUIRES(_REQ) \ + ::__cccl_requires<_CCCL_CONCEPT_EAT_REQUIRES_(_REQ)> +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_NOEXCEPT(_REQ) _CCCL_CONCEPT_NOEXCEPT_REQUIREMENT_(_REQ) +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_TYPENAME(_REQ) \ static_cast<::__cccl_tag<_CCCL_CONCEPT_EAT_TYPENAME_(_REQ)>*>(nullptr) -# define _CCCL_CONCEPT_REQUIREMENT_CASE_SAME_AS(_REQ) \ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_SAME_AS(_REQ) \ ::__cccl_requires<::cuda::std::same_as<_CCCL_CONCEPT_SAME_AS_REQUIREMENT_(_REQ)>> -# define _CCCL_CONCEPT_REQUIREMENT_CASE_SATISFIES(_REQ) \ +# define _CCCL_CONCEPT_REQUIREMENT_CASE__CCCL_SWITCH_SATISFIES(_REQ) \ ::__cccl_requires < _CCCL_CONCEPT_GET_CONCEPT_FROM_SATISFIES_(_REQ) < decltype(_CCCL_CONCEPT_EAT_SATISFIES_(_REQ)) \ >> @@ -320,23 +322,24 @@ namespace __cccl_unqualified_cuda_std = ::cuda::std; // NOLINT(misc-unused-alias _CCCL_API inline static auto __cccl_well_formed(__VA_ARGS__) _CCCL_REQUIRES_EXPR_REQUIREMENTS_ // Expands "T1, T2, variadic T3" to ", class T1, class T2, class... T3" -# define _CCCL_REQUIRES_EXPR_TPARAM_DEFNS(...) _CCCL_PP_FOR_EACH(_CCCL_REQUIRES_EXPR_TPARAM_DEFN, __VA_ARGS__) +# define _CCCL_REQUIRES_EXPR_TPARAM_DEFNS(...) _CCCL_PP_FOR_EACH(_CCCL_REQUIRES_EXPR_TPARAM_DEFN, __VA_ARGS__) // Expands "TY" to ", class TY" and "variadic TY" to ", class... TY" -# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN(_TY) , _CCCL_PP_SWITCH2(_CCCL_REQUIRES_EXPR_TPARAM_DEFN, _TY) -# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN_SWITCH_variadic _CCCL_PP_CASE(VARIADIC) -# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN_CASE_DEFAULT(_TY) class _TY -# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN_CASE_VARIADIC(_TY) \ +# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN(_TY) , _CCCL_PP_SWITCH2(_CCCL_REQUIRES_EXPR_TPARAM_DEFN, _TY) +# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN_SWITCH_variadic _CCCL_PP_CASE(_CCCL_SWITCH_VARIADIC) +# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN_CASE__CCCL_SWITCH_DEFAULT(_TY) class _TY +# define _CCCL_REQUIRES_EXPR_TPARAM_DEFN_CASE__CCCL_SWITCH_VARIADIC(_TY) \ class... _CCCL_PP_CAT(_CCCL_REQUIRES_EXPR_EAT_VARIADIC_, _TY) // Expands "T1, T2, variadic T3" to ", T1, T2, T3..." -# define _CCCL_REQUIRES_EXPR_TPARAM_REFS(...) _CCCL_PP_FOR_EACH(_CCCL_REQUIRES_EXPR_TPARAM_REF, __VA_ARGS__) +# define _CCCL_REQUIRES_EXPR_TPARAM_REFS(...) _CCCL_PP_FOR_EACH(_CCCL_REQUIRES_EXPR_TPARAM_REF, __VA_ARGS__) // Expands "TY" to ", TY" and "variadic TY" to ", TY..." -# define _CCCL_REQUIRES_EXPR_TPARAM_REF(_TY) , _CCCL_PP_SWITCH2(_CCCL_REQUIRES_EXPR_TPARAM_REF, _TY) -# define _CCCL_REQUIRES_EXPR_TPARAM_REF_SWITCH_variadic _CCCL_PP_CASE(VARIADIC) -# define _CCCL_REQUIRES_EXPR_TPARAM_REF_CASE_DEFAULT(_TY) _TY -# define _CCCL_REQUIRES_EXPR_TPARAM_REF_CASE_VARIADIC(_TY) _CCCL_PP_CAT(_CCCL_REQUIRES_EXPR_EAT_VARIADIC_, _TY)... +# define _CCCL_REQUIRES_EXPR_TPARAM_REF(_TY) , _CCCL_PP_SWITCH2(_CCCL_REQUIRES_EXPR_TPARAM_REF, _TY) +# define _CCCL_REQUIRES_EXPR_TPARAM_REF_SWITCH_variadic _CCCL_PP_CASE(_CCCL_SWITCH_VARIADIC) +# define _CCCL_REQUIRES_EXPR_TPARAM_REF_CASE__CCCL_SWITCH_DEFAULT(_TY) _TY +# define _CCCL_REQUIRES_EXPR_TPARAM_REF_CASE__CCCL_SWITCH_VARIADIC(_TY) \ + _CCCL_PP_CAT(_CCCL_REQUIRES_EXPR_EAT_VARIADIC_, _TY)... // NVRTC does not support __COUNTER__ so we need a better way of defining unique identifiers # if _CCCL_COMPILER(NVRTC) @@ -355,10 +358,11 @@ namespace __cccl_unqualified_cuda_std = ::cuda::std; // NOLINT(misc-unused-alias _CCCL_PP_EVAL(_CCCL_REQUIRES_EXPR_ID_CONCAT_ALL_IMPL, __VA_ARGS__, , , , , , , , , ) // Expands "TY" to "TY" and "variadic TY" to "TY" -# define _CCCL_REQUIRES_EXPR_ID_IMPL(_TY) , _CCCL_PP_SWITCH2(_CCCL_REQUIRES_EXPR_ID_IMPL, _TY) -# define _CCCL_REQUIRES_EXPR_ID_IMPL_SWITCH_variadic _CCCL_PP_CASE(VARIADIC) -# define _CCCL_REQUIRES_EXPR_ID_IMPL_CASE_DEFAULT(_TY) _TY -# define _CCCL_REQUIRES_EXPR_ID_IMPL_CASE_VARIADIC(_TY) _CCCL_PP_CAT(_CCCL_REQUIRES_EXPR_EAT_VARIADIC_, _TY) +# define _CCCL_REQUIRES_EXPR_ID_IMPL(_TY) , _CCCL_PP_SWITCH2(_CCCL_REQUIRES_EXPR_ID_IMPL, _TY) +# define _CCCL_REQUIRES_EXPR_ID_IMPL_SWITCH_variadic _CCCL_PP_CASE(_CCCL_SWITCH_VARIADIC) +# define _CCCL_REQUIRES_EXPR_ID_IMPL_CASE__CCCL_SWITCH_DEFAULT(_TY) _TY +# define _CCCL_REQUIRES_EXPR_ID_IMPL_CASE__CCCL_SWITCH_VARIADIC(_TY) \ + _CCCL_PP_CAT(_CCCL_REQUIRES_EXPR_EAT_VARIADIC_, _TY) # else // ^^^ _CCCL_COMPILER(NVRTC) ^^^^/ vvv !_CCCL_COMPILER(NVRTC) # define _CCCL_REQUIRES_EXPR_ID(...) _CCCL_COUNTER()