On 16 August 2017 at 15:40, Jonathan Wakely wrote:
> On 16 August 2017 at 15:27, Oleg Endo wrote:
>> On Wed, 2017-08-16 at 13:30 +0200, Paolo Carlini wrote:
>>>
>>> I didn't understand why we don't already handle the easy case:
>>>
>>> constexpr int* ptr = nullptr;
>>> delete ptr;
>>>
>>
>> What about overriding the global delete operator with some user defined
>> implementation?  Is there something in the C++ standard that says the
>> invocation can be completely omitted, i.e. on which side of the call
>> the nullptr check is being done?
>>
>> One possible use case could be overriding the global delete operator to
>> count the number of invocations, incl. for nullptr.  Not sure how
>> useful that is though.
>
> Users can replace the deallocation function "operator delete" but this
> is the delete operator ... a subtly different thing.
>
> Anyway, the standard says:
>
> "If the value of the operand of the delete-expression is a null
> pointer value, it is unspecified whether a deallocation function will
> be called as described above."
>
> So it's permitted to omit the call to operator delete.

Before C++11 the call was required:

"The delete-expression will call a deallocation function (3.7.3.2)."


This was changed by
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#348

Reply via email to