See <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3353.htm>.
My strong inclination is *not* to add any obsolescence diagnostics, just support the new features (which should already be present for C++) for C23.
0o123 or 0O123 aren't supported for C++, just \u{123}, \x{123}, \o{123} are.
Note that there's also bug 60523 about octal literals
(In reply to Joseph S. Myers from comment #1) > My strong inclination is *not* to add any obsolescence diagnostics, just > support the new features (which should already be present for C++) for C23. Why no diagnostics? The new features are good, and a warning would help locate and eradicate the evil from code bases.
Obsolescence is generally unhelpful when there is no non-obsolescent alternative in previous standard versions, given that much code needs to work with a range of implementation and standard versions; octal literals are extremely widely used and the new syntax doesn't exist before C23.
Not even C23. So codebases can start relying on the new syntax only when C2Y is released and compilers supporting it are generally available.
(In reply to Joseph S. Myers from comment #5) > Obsolescence is generally unhelpful when there is no non-obsolescent > alternative in previous standard versions, given that much code needs to > work with a range of implementation and standard versions; octal literals > are extremely widely used and the new syntax doesn't exist before C23. So how about a new warning that is off by default and can be activated by those who want to convert their code, which can later become included in -Wall or -Wextra?
At least having an option to warn is useful to begin with. Turning it on by default (or as part of -Wall, or -Wextra) can be a seperate discussion.
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>: https://gcc.gnu.org/g:e020116db056352d9a7495e85d37e66c36f6ea32 commit r15-4403-ge020116db056352d9a7495e85d37e66c36f6ea32 Author: Jakub Jelinek <jakub@redhat.com> Date: Thu Oct 17 07:01:44 2024 +0200 c, libcpp: Partially implement C2Y N3353 paper [PR117028] The following patch partially implements the N3353 paper. In particular, it adds support for the delimited escape sequences (\u{123}, \x{123}, \o{123}) which were added already for C++23, all I had to do is split the delimited escape sequence guarding from named universal character escape sequence guards (\N{LATIN CAPITAL LETTER C WITH CARON}), which C++23 has but C2Y doesn't and emit different diagnostics for C from C++ for the delimited escape sequences. And it adds support for the new style of octal literals, 0o137 or 0O1777. I have so far added that just for C and not C++, because I have no idea whether C++ will want to handle it similarly. What the patch doesn't do is any kind of diagnostics for obsoletion of \137 or 0137, as discussed in the PR, I think it is way too early for that. Perhaps some non-default warning later on. 2024-10-17 Jakub Jelinek <jakub@redhat.com> PR c/117028 libcpp/ * include/cpplib.h (struct cpp_options): Add named_uc_escape_seqs, octal_constants and cpp_warn_c23_c2y_compat members. (enum cpp_warning_reason): Add CPP_W_C23_C2Y_COMPAT enumerator. * init.cc (struct lang_flags): Add named_uc_escape_seqs and octal_constants bit-fields. (lang_defaults): Add initializers for them into the table. (cpp_set_lang): Initialize named_uc_escape_seqs and octal_constants. (cpp_create_reader): Initialize cpp_warn_c23_c2y_compat to -1. * charset.cc (_cpp_valid_ucn): Test CPP_OPTION (pfile, named_uc_escape_seqs) rather than CPP_OPTION (pfile, delimited_escape_seqs) in \N{} related tests. Change wording of C cpp_pedwarning for \u{} and emit -Wc23-c2y-compat warning for it too if needed. Formatting fixes. (convert_hex): Change wording of C cpp_pedwarning for \u{} and emit -Wc23-c2y-compat warning for it too if needed. (convert_oct): Likewise. * expr.cc (cpp_classify_number): Handle C2Y 0o or 0O prefixed octal constants. (cpp_interpret_integer): Likewise. gcc/c-family/ * c.opt (Wc23-c2y-compat): Add CPP and CppReason parameters. * c-opts.cc (set_std_c2y): Use CLK_STDC2Y or CLK_GNUC2Y rather than CLK_STDC23 and CLK_GNUC23. Formatting fix. * c-lex.cc (interpret_integer): Handle C2Y 0o or 0O prefixed and wb/WB/uwb/UWB suffixed octal constants. gcc/testsuite/ * gcc.dg/bitint-112.c: New test. * gcc.dg/c23-digit-separators-1.c: Add _Static_assert for valid binary constant with digit separator. * gcc.dg/c23-octal-constants-1.c: New test. * gcc.dg/c23-octal-constants-2.c: New test. * gcc.dg/c2y-digit-separators-1.c: New test. * gcc.dg/c2y-digit-separators-2.c: New test. * gcc.dg/c2y-octal-constants-1.c: New test. * gcc.dg/c2y-octal-constants-2.c: New test. * gcc.dg/c2y-octal-constants-3.c: New test. * gcc.dg/cpp/c23-delimited-escape-seq-1.c: New test. * gcc.dg/cpp/c23-delimited-escape-seq-2.c: New test. * gcc.dg/cpp/c2y-delimited-escape-seq-1.c: New test. * gcc.dg/cpp/c2y-delimited-escape-seq-2.c: New test. * gcc.dg/cpp/c2y-delimited-escape-seq-3.c: New test. * gcc.dg/cpp/c2y-delimited-escape-seq-4.c: New test. * gcc.dg/octal-constants-1.c: New test. * gcc.dg/octal-constants-2.c: New test. * gcc.dg/octal-constants-3.c: New test. * gcc.dg/octal-constants-4.c: New test. * gcc.dg/system-octal-constants-1.c: New test. * gcc.dg/system-octal-constants-1.h: New file.