// C++26 P3144R2 - Deleting a Pointer to an Incomplete Type Should be Ill-formed // { dg-do compile { target c++26 } } // { dg-options "-fpermissive" } struct S; // { dg-message "forward declaration of 'struct S'" } struct T; // { dg-message "forward declaration of 'struct T'" } struct U; // { dg-message "forward declaration of 'struct U'" } void foo (S *p, T *q, U *r, S *s, T *t, U *u) { delete p; // { dg-warning "operator 'delete' used on incomplete type" } delete q; // { dg-warning "operator 'delete' used on incomplete type" } delete r; // { dg-warning "operator 'delete' used on incomplete type" } delete[] s; // { dg-warning "operator 'delete \\\[\\\]' used on incomplete type" } delete[] t; // { dg-warning "operator 'delete \\\[\\\]' used on incomplete type" } delete[] u; // { dg-warning "operator 'delete \\\[\\\]' used on incomplete type" } } struct S { int s; }; struct T { int t; ~T () {} }; struct U { int u; void operator delete (void *) noexcept; void operator delete[] (void *) noexcept; };