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

            Bug ID: 93700
           Summary: new expression ignores deleted operator new.
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: maxim.yegorushkin at gmail dot com
  Target Milestone: ---

The following code:

    struct C {
        C() { throw 1; }
        static void* operator new(unsigned long);
        static void operator delete(void*) = delete;
    };

    C* f() { return new C; }

Correctly fails to compile with clang:

    <source>:7:17: error: attempt to use a deleted function
    C* f() { return new C; }
                    ^
    <source>:4:10: note: 'operator delete' has been explicitly marked deleted
here
        void operator delete(void*) = delete;
             ^

Whereas g++ simply ignores deleted `operator delete` and doesn't call it in the
generated assembly at all. If that `operator delete` is commented out g++ does
call the global `operator delete`.

Reply via email to