https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79706
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- Ah good point. struct A { void operator delete(void*) = delete; void operator delete[](void*) = delete; }; A* f(); A* f2(); using type1 = decltype(delete f()); using type2 = decltype(delete[] f2()); This fails as expected. Comment 2 is not a bug then, but comment 1 and comment 3 still seem like bugs.