Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
207 changes: 133 additions & 74 deletions libcudacxx/include/cuda/std/__cccl/preprocessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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(...)
Expand Down Expand Up @@ -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__)
Expand Down Expand Up @@ -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
Loading
Loading