https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114078
Bug ID: 114078
Summary: operator new and operator delete are incorrectly
acceptable as explicit object member functions
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Keywords: accepts-invalid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: de34 at live dot cn
Target Milestone: ---
GCC currently accepts this wrong program while it shouldn't
(https://godbolt.org/z/7jGnGqYPM), because member operator new/operator delete
are always static member functions.
#include <cstddef>
#include <new>
struct S {
void* operator new(this std::size_t);
void operator delete(this S*, std::destroying_delete_t);
operator S*() const;
operator std::size_t() const;
};
int main()
{
S{}.operator new();
S{}.operator delete(std::destroying_delete);
}
Similar to https://github.com/llvm/llvm-project/issues/82249 which is fixed
recently.