On Mon, 6 Apr 2020 at 13:45, Nathan Sidwell wrote: > The both operator new and operator delete are looked up in the same > manner. The std does not require a 'matching pair' be found. but it is > extremely poor form for a class to declare exactly one of operator > {new,delete}.
There are unfortunately several such example in the standard! I wonder how much benefit we will really get from trying to make this optimisation too general. Just eliding (or coalescing) implicit calls to ::operator new(size_t) and ::operator delete(void*, size_t) (and the [] and align_val_t forms of those) probably covers 99% of real cases.