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

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Probably the same issue:

struct A {
  void operator delete(void*) = delete;
  void operator delete[](void*) = delete;
};

using type1 = decltype(delete (A*)0);
using type2 = decltype(delete[] (A*)0);

Neither of these invalid delete expressions gives an error.

Clang says:

e.cc:6:24: error: attempt to use a deleted function
using type1 = decltype(delete (A*)0);
                       ^
e.cc:2:8: note: 'operator delete' has been explicitly marked deleted here
  void operator delete(void*) = delete;
       ^
e.cc:7:24: error: attempt to use a deleted function
using type2 = decltype(delete[] (A*)0);
                       ^
e.cc:3:8: note: 'operator delete[]' has been explicitly marked deleted here
  void operator delete[](void*) = delete;
       ^
2 errors generated.


EDG says:

"e.cc", line 6: error: function "A::operator delete(void *)" (declared at line
          2) cannot be referenced -- it is a deleted function
  using type1 = decltype(delete (A*)0);
                         ^

"e.cc", line 7: error: function "A::operator delete[](void *)" (declared at
          line 3) cannot be referenced -- it is a deleted function
  using type2 = decltype(delete[] (A*)0);
                         ^

2 errors detected in the compilation of "e.cc".

Reply via email to