https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107268
Bug ID: 107268 Summary: Poor diagnostic for missing colon in ctor-initializer Product: gcc Version: 12.2.1 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- struct UsesAlloc { bool passed_alloc; UsesAlloc(int) passed_alloc(false) { } }; The user forgot to type the ':' in the constructor, but GCC says: parser_diag.C:5:16: error: expected ‘;’ at end of member declaration 5 | UsesAlloc(int) passed_alloc(false) { } | ^ | ; parser_diag.C:5:31: error: expected identifier before ‘false’ 5 | UsesAlloc(int) passed_alloc(false) { } | ^~~~~ parser_diag.C:5:31: error: expected ‘,’ or ‘...’ before ‘false’ parser_diag.C:5:18: error: ISO C++ forbids declaration of ‘passed_alloc’ with no type [-fpermissive] 5 | UsesAlloc(int) passed_alloc(false) { } | ^~~~~~~~~~~~ parser_diag.C:5:40: error: ‘int UsesAlloc::passed_alloc(int)’ conflicts with a previous declaration 5 | UsesAlloc(int) passed_alloc(false) { } | ^ parser_diag.C:3:8: note: previous declaration ‘bool UsesAlloc::passed_alloc’ 3 | bool passed_alloc; | ^~~~~~~~~~~~ parser_diag.C: In member function ‘int UsesAlloc::passed_alloc(int)’: parser_diag.C:5:40: warning: no return statement in function returning non-void [-Wreturn-type] 5 | UsesAlloc(int) passed_alloc(false) { } | ^ That's a lot of output. Clang is less noisy, though still not very helpful: parser_diag.C:5:17: error: expected ';' at end of declaration list UsesAlloc(int) passed_alloc(false) { } ^ ; 1 error generated. EDG is similar: "parser_diag.C", line 5: error: expected a ";" UsesAlloc(int) passed_alloc(false) { } ^ 1 error detected in the compilation of "parser_diag.C". It would be better GCC if print a single line like Clang and EDG, but it would be even better if it suggested that a ':' is missing, instead of a ';' (because either of those is valid there).