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

            Bug ID: 116251
           Summary: Invalid use of pseudo destructor is not diagnosed in
                    unevaluated contexts
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: luigighiron at gmail dot com
  Target Milestone: ---

The following code is incorrectly accepted by GCC:

using T=int;
T i;
decltype(i.~T)foo();
typeid(i.~T);
noexcept(i.~T);

The last three lines are invalid, and GCC accepts them without warning.
Additionally, the following is also accepted with a warning (with the default
warnings) and is similarly invalid:

sizeof(i.~T);

All of these uses of the pseudo destructor are invalid and should be diagnosed.
Clang diagnoses all of these correctly. MSVC does not diagnose the first three
cases (but it does diagnose the fourth case since it doesn't support
sizeof(void)) and allows these invalid uses even in evaluated contexts.
  • [Bug c++/116251] New: Invalid us... luigighiron at gmail dot com via Gcc-bugs

Reply via email to