Last active
August 29, 2015 14:22
-
-
Save bbuecherl/e74b8629c1578a916df9 to your computer and use it in GitHub Desktop.
some utility macros for c++
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #ifndef INCLUDE_MACROS_H_ | |
| #define INCLUDE_MACROS_H_ | |
| // concat arguments | |
| #define CONCAT(a, b) a ## b | |
| // macro to count passed arguments (maximum 63 arguments) | |
| #define NUM_ARGS(...) NUM_ARGS_(,__VA_ARGS__, 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); | |
| #define NUM_ARGS_(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, \ | |
| _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, \ | |
| _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, \ | |
| _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, \ | |
| _60, _61, _62, _63, N, ...) N | |
| // get argument (maximum 63 arguments) | |
| #define GET_ARG(i, ...) CONCAT(GET_ARG_, i)(__VA_ARGS__) | |
| #define GET_ARG_0(e0, ...) e0 | |
| #define GET_ARG_1(e0, e1, ...) e1 | |
| #define GET_ARG_2(e0, e1, e2, ...) e2 | |
| #define GET_ARG_3(e0, e1, e2, e3, ...) e3 | |
| #define GET_ARG_4(e0, e1, e2, e3, e4, ...) e4 | |
| #define GET_ARG_5(e0, e1, e2, e3, e4, e5, ...) e5 | |
| #define GET_ARG_6(e0, e1, e2, e3, e4, e5, e6, ...) e6 | |
| #define GET_ARG_7(e0, e1, e2, e3, e4, e5, e6, e7, ...) e7 | |
| #define GET_ARG_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, ...) e8 | |
| #define GET_ARG_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ...) e9 | |
| #define GET_ARG_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ...) e10 | |
| #define GET_ARG_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ...) e11 | |
| #define GET_ARG_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ...) e12 | |
| #define GET_ARG_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ...) e13 | |
| #define GET_ARG_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ...) e14 | |
| #define GET_ARG_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ...) e15 | |
| #define GET_ARG_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ...) e16 | |
| #define GET_ARG_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ...) e17 | |
| #define GET_ARG_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ...) e18 | |
| #define GET_ARG_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ...) e19 | |
| #define GET_ARG_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ...) e20 | |
| #define GET_ARG_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ...) e21 | |
| #define GET_ARG_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ...) e22 | |
| #define GET_ARG_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ...) e23 | |
| #define GET_ARG_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ...) e24 | |
| #define GET_ARG_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ...) e25 | |
| #define GET_ARG_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ...) e26 | |
| #define GET_ARG_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ...) e27 | |
| #define GET_ARG_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ...) e28 | |
| #define GET_ARG_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ...) e29 | |
| #define GET_ARG_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ...) e30 | |
| #define GET_ARG_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ...) e31 | |
| #define GET_ARG_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ...) e32 | |
| #define GET_ARG_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ...) e33 | |
| #define GET_ARG_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ...) e34 | |
| #define GET_ARG_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ...) e35 | |
| #define GET_ARG_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ...) e36 | |
| #define GET_ARG_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ...) e37 | |
| #define GET_ARG_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ...) e38 | |
| #define GET_ARG_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ...) e39 | |
| #define GET_ARG_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ...) e40 | |
| #define GET_ARG_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ...) e41 | |
| #define GET_ARG_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ...) e42 | |
| #define GET_ARG_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ...) e43 | |
| #define GET_ARG_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ...) e44 | |
| #define GET_ARG_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ...) e45 | |
| #define GET_ARG_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ...) e46 | |
| #define GET_ARG_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ...) e47 | |
| #define GET_ARG_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ...) e48 | |
| #define GET_ARG_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ...) e49 | |
| #define GET_ARG_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ...) e50 | |
| #define GET_ARG_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ...) e51 | |
| #define GET_ARG_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ...) e52 | |
| #define GET_ARG_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ...) e53 | |
| #define GET_ARG_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ...) e54 | |
| #define GET_ARG_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ...) e55 | |
| #define GET_ARG_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ...) e56 | |
| #define GET_ARG_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ...) e57 | |
| #define GET_ARG_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ...) e58 | |
| #define GET_ARG_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ...) e59 | |
| #define GET_ARG_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ...) e60 | |
| #define GET_ARG_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ...) e61 | |
| #define GET_ARG_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ...) e62 | |
| #define GET_ARG_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, ...) e63 | |
| // for each loop over arguments | |
| #define FOREACH_ARG(c, ...) FOREACH_ARG_(0, __VA_ARGS__, FOREACH_ARG_63, \ | |
| FOREACH_ARG_62, FOREACH_ARG_61, FOREACH_ARG_60, FOREACH_ARG_59, \ | |
| FOREACH_ARG_58, FOREACH_ARG_57, FOREACH_ARG_56, FOREACH_ARG_55, \ | |
| FOREACH_ARG_54, FOREACH_ARG_53, FOREACH_ARG_52, FOREACH_ARG_51, \ | |
| FOREACH_ARG_50, FOREACH_ARG_49, FOREACH_ARG_48, FOREACH_ARG_47, \ | |
| FOREACH_ARG_46, FOREACH_ARG_45, FOREACH_ARG_44, FOREACH_ARG_43, \ | |
| FOREACH_ARG_42, FOREACH_ARG_41, FOREACH_ARG_40, FOREACH_ARG_39, \ | |
| FOREACH_ARG_38, FOREACH_ARG_37, FOREACH_ARG_36, FOREACH_ARG_35, \ | |
| FOREACH_ARG_34, FOREACH_ARG_33, FOREACH_ARG_32, FOREACH_ARG_31, \ | |
| FOREACH_ARG_30, FOREACH_ARG_29, FOREACH_ARG_28, FOREACH_ARG_27, \ | |
| FOREACH_ARG_26, FOREACH_ARG_25, FOREACH_ARG_24, FOREACH_ARG_23, \ | |
| FOREACH_ARG_22, FOREACH_ARG_21, FOREACH_ARG_20, FOREACH_ARG_19, \ | |
| FOREACH_ARG_18, FOREACH_ARG_17, FOREACH_ARG_16, FOREACH_ARG_15, \ | |
| FOREACH_ARG_14, FOREACH_ARG_13, FOREACH_ARG_12, FOREACH_ARG_11, \ | |
| FOREACH_ARG_10, FOREACH_ARG_9, FOREACH_ARG_8, FOREACH_ARG_7, FOREACH_ARG_6, \ | |
| FOREACH_ARG_5, FOREACH_ARG_4, FOREACH_ARG_3, FOREACH_ARG_2, FOREACH_ARG_1, \ | |
| FOREACH_ARG_0)(c, __VA_ARGS__) | |
| #define FOREACH_ARG_(_, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13,\ | |
| _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, \ | |
| _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, \ | |
| _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, \ | |
| _59, _60, _61, _62, _63, N, ...) N | |
| #define FOREACH_ARG_0(_call, ...) | |
| #define FOREACH_ARG_1(_call, x, ...) _call(x) | |
| #define FOREACH_ARG_2(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_1(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_3(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_2(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_4(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_3(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_5(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_4(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_6(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_5(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_7(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_6(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_8(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_7(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_9(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_8(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_10(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_9(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_11(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_10(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_12(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_11(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_13(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_12(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_14(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_13(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_15(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_14(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_16(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_15(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_17(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_16(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_18(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_17(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_19(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_18(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_20(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_19(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_21(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_20(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_22(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_21(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_23(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_22(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_24(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_23(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_25(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_24(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_26(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_25(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_27(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_26(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_28(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_27(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_29(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_28(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_30(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_29(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_31(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_30(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_32(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_31(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_33(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_32(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_34(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_33(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_35(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_34(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_36(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_35(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_37(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_36(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_38(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_37(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_39(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_38(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_40(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_39(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_41(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_40(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_42(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_41(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_43(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_42(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_44(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_43(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_45(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_44(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_46(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_45(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_47(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_46(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_48(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_47(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_49(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_48(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_50(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_49(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_51(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_50(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_52(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_51(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_53(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_52(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_54(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_53(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_55(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_54(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_56(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_55(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_57(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_56(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_58(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_57(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_59(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_58(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_60(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_59(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_61(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_60(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_62(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_61(_call, __VA_ARGS__) | |
| #define FOREACH_ARG_63(_call, x, ...) _call(x) \ | |
| FOREACH_ARG_62(_call, __VA_ARGS__) | |
| // compare type | |
| #define TYPECHECK(var, type) ({ \ | |
| type __dummy; \ | |
| typeof(var) __dummy2; \ | |
| (void)(&__dummy == &__dummy2); \ | |
| 1; \ | |
| }) | |
| #endif // INCLUDE_MACROS_H_ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment