https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113760
--- Comment #8 from Marek Polacek <mpolacek at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #7) > g++ emits 4 errors on > struct S > { > void foo () {} > void bar () {}; > void baz () = delete; > void qux () = delete; > ; > void corge () = delete; > ; > ; > int s; > ; > }; > ; > ; > (one after qux, 2 after corge, one after s), clang++ -pedantic-errors > -std=c++23 including trunk 2 (one after corge, one after s), so neither > implements the DR. Strangely, with -pedantic-errors -std=c++23 -Wextra-semi > it warns 7 times but doesn't error (which is I think the desirable state). > Now, g++ with -pedantic-errors -std=c++23 -Wextra-semi emits just one > warning on the ; after bar and still the 4 errors. > > That said, -Wextra-semi in GCC is documented that way: > Warn about redundant semicolons after in-class function > definitions. > and clang doesn't bother to document it at all (at least haven't found it). > > So, shall we change documentation of -Wextra-semi and say change > /* A declaration consisting of a single semicolon is invalid > * before C++11. Allow it unless we're being pedantic. */ > if (cxx_dialect < cxx11) > pedwarn (input_location, OPT_Wpedantic, "extra %<;%>"); > to else warning (OPT_Wextra_semi, "extra %<;%>"); etc.? Yeah, I'd say so. > Then there is > if (!in_system_header_at (token->location)) > { > gcc_rich_location richloc (token->location); > richloc.add_fixit_remove (); > pedwarn (&richloc, OPT_Wpedantic, "extra %<;%>"); > } > should that be similarly if (cxx_dialect < cxx11) pedwarn; else warning ? I think so. The < cxx11 is definitely missing here. > Or, if we want to change this already for GCC 14, do that if (cxx_dialect < > cxx11) part > just before the last pedwarn above and add the else warning for GCC 15? I would do it all at once. I guess: {} -> no warnings in any dialect -pedantic -> pedwarns only in C++03 -Wextra-semi -> all warnings in all dialects -std=c++11 -pedantic -Wextra-semi -> only -Wextra-semi warnings -std=c++03 -pedantic -Wextra-semi -> pedwarns -std=c++11 -pedantic -Wno-extra-semi -> no warnings -std=c++03 -pedantic -Wno-extra-semi -> no warnings -std=c++03 -pedantic-errors -Wextra-semi -> errors (?) -std=c++11 -pedantic-errors -Wextra-semi -> warnings