https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106111

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Oh, that's because -Wc++20-compat doesn't include -Wc++17-compat etc.

With the right options GCC warns about three:

$ g++ -std=c++03 r.C -c -Wc++20-compat -Wc++11-compat -Wc++14-compat
-Wc++17-compat
r.C:1:5: warning: identifier ‘decltype’ is a keyword in C++11 [-Wc++11-compat]
    1 | int decltype, constexpr, consteval, requires, noexcept, alignof,
alignas;
      |     ^~~~~~~~
r.C:1:15: warning: identifier ‘constexpr’ is a keyword in C++11
[-Wc++11-compat]
    1 | int decltype, constexpr, consteval, requires, noexcept, alignof,
alignas;
      |               ^~~~~~~~~
r.C:1:47: warning: identifier ‘noexcept’ is a keyword in C++11 [-Wc++11-compat]
    1 | int decltype, constexpr, consteval, requires, noexcept, alignof,
alignas;
      |                                               ^~~~~~~~

We're missing warnings for alignof and alignas in C++11, and consteval and
requires in C++20.

Clang warns about them all:

$ clang++ -std=c++03 r.C -c -Wc++20-compat -Wc++11-compat -Wc++14-compat
-Wc++17-compat
r.C:1:5: warning: 'decltype' is a keyword in C++11 [-Wc++11-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
    ^
r.C:1:15: warning: 'constexpr' is a keyword in C++11 [-Wc++11-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
              ^
r.C:1:26: warning: 'consteval' is a keyword in C++20 [-Wc++20-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
                         ^
r.C:1:37: warning: 'requires' is a keyword in C++20 [-Wc++20-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
                                    ^
r.C:1:47: warning: 'noexcept' is a keyword in C++11 [-Wc++11-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
                                              ^
r.C:1:57: warning: 'alignof' is a keyword in C++11 [-Wc++11-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
                                                        ^
r.C:1:66: warning: 'alignas' is a keyword in C++11 [-Wc++11-compat]
int decltype, constexpr, consteval, requires, noexcept, alignof, alignas;
                                                                 ^
7 warnings generated.

Reply via email to