// Uses ideas from Jens Gustedt, taken from #pragma once // This macro should be directly concatenated with the tuple, as in OV_PP_IS_EMPTY (1,2,3) instead of OV_PP_IS_EMPTY( (1,2,3) ) #define OV_PP_IS_EMPTY(...) OV_PP_IS_EMPTY_I( OV_PP_EXPAND_EMPTY( __VA_ARGS__) ) #define OV_PP_IS_EMPTY_I(x) PP_ARG_N x #define OV_PP_EXPAND_EMPTY(...) OV_PP_EXPAND( ( OV_PP_EXPAND_EMPTY_I __VA_ARGS__ () , PP_BOOL_SEQ_N ) ) #define OV_PP_EXPAND_EMPTY_I() PP_BOOL_SEQ_N #define OV_PP_EXPAND(x) x #define PP_BOOL_SEQ_N \ 0,0,0,0, \ 0,0,0,0,0,0,0,0,0,0, \ 0,0,0,0,0,0,0,0,0,0, \ 0,0,0,0,0,0,0,0,0,0, \ 0,0,0,0,0,0,0,0,0,0, \ 0,0,0,0,0,0,0,0,0,0, \ 0,0,0,0,0,0,0,0,0,1 #define PP_ARG_N( _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