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

            Bug ID: 90803
           Summary: gcc accepts invalid code
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zhonghao at pku dot org.cn
  Target Milestone: ---

My gcc is 10.0.0, and the code is:


struct S {};
struct T : S {};
void foo(T *t) { t->~S(); }

gcc accepts the code, but icc, msvc, and clang all reject it.

msvc:
<source>(3): error C2300: 'T': class does not have a destructor called '~S'

Compiler returned: 2

icc:

source>(3): error: invalid destructor name for type "T"

  void foo(T *t) { t->~S(); }

                       ^

compilation aborted for <source> (code 2)

Compiler returned: 2

clang:

source>:3:22: error: destructor type 'S' in object destruction expression does
not match the type 'T' of the object being destroyed

void foo(T *t) { t->~S(); }

                     ^

<source>:1:8: note: type 'S' is declared here

struct S {};

       ^

1 error generated.

Compiler returned: 1

Reply via email to