https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119747
Bug ID: 119747 Summary: Request for clearer diagnostic when consecutive commas appear in a function call Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: barry.revzin at gmail dot com Target Milestone: --- Here is a reduced example of a problem I just spent a while debugging: template <class... Args> void f(int, Args...) { } #define CALL_F(v, ...) f(v, __VA_OPT__(,) __VA_ARGS__) int main() { CALL_F(1, 2); } The diagnostic that I get on gcc trunk (so 15, and with c++26 so as to have __VA_OPT__ support) is: <source>: In function 'int main()': <source>:6:40: error: expected primary-expression before ',' token 6 | #define CALL_F(v, ...) f(v, __VA_OPT__(,) __VA_ARGS__) | ^ <source>:9:5: note: in expansion of macro 'CALL_F' 9 | CALL_F(1, 2); | ^~~~~~ I couldn't make heads or tails of this diagnostic. And couldn't tell what was wrong with the code either. It wasn't until I preprocessed it that the issue became obvious. I'm doing this: int main() { f(1, , 2); } And gcc is helpfully pointing me to the 2nd comma and saying that I need a primary-expression before that. Which is true! But it would be a lot more helpful if the diagnostic told me I had consecutive commas. Even something like: <source>:6:40: error: expected primary-expression before ',' token, received two consecutive commas would've meant I would have instantly found the issue.