https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105732
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed. Reduced as much as I could: #define _VA_FEATURE_DETECT__3RD_ARG(_placeholder_1, _placeholder_2, value, ...) value # define _VA_FEATURE_OPT_DISAPPEARS 1 # define _VA_FEATURE_OPT_DISAPPEARS__VA_OPT__(_placeholder) 0 # define _VA_FEATURE_OPT_DETECT_UNEXPANDED(...) _VA_FEATURE_OPT_DISAPPEARS##__VA_OPT__(foo) # define _VA_FEATURE_OPT_DETECT_VERIFY_2_ARGS_TEST_ZERO(_placeholder_1, _placeholder_2) \ _VA_FEATURE_OPT_DETECT_UNEXPANDED() # define _VA_FEATURE_OPT_DETECT_1_OR_2_ARGS(_placeholder, ...) \ _VA_FEATURE_DETECT__3RD_ARG(__VA_ARGS__, \ _VA_FEATURE_OPT_DETECT_VERIFY_2_ARGS_TEST_ZERO, \ 0) # define _VA_FEATURE_OPT_DETECT_1_ARG(...) \ _VA_FEATURE_OPT_DETECT_1_OR_2_ARGS(bar, __VA_OPT__(, ))(__VA_OPT__(, )) # define _VA_FEATURE_OPT_DETECT_SUPPORTED _VA_FEATURE_OPT_DETECT_1_ARG(?) # if _VA_FEATURE_OPT_DETECT_SUPPORTED # endif