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".