1006. operator delete in garbage collected implementation

Section: 21.6.2 [new.delete] Status: C++11 Submitter: Alisdair Meredith Opened: 2009-03-11 Last modified: 2016-02-10

Priority: Not Prioritized

View all other issues in [new.delete].

View all issues with C++11 status.

Discussion:

Addresses UK 190

It is not entirely clear how the current specification acts in the presence of a garbage collected implementation.

[ Summit: ]

Agreed.

[ 2009-05-09 Alisdair adds: ]

Proposed wording is too strict for implementations that do not support garbage collection. Updated wording supplied.

[ Batavia (2009-05): ]

We recommend advancing this to Tentatively Ready with the understanding that it will not be moved for adoption unless and until the proposed resolution to Core issue #853 is adopted.

Proposed resolution:

(Editorial note: This wording ties into the proposed resolution for Core #853)

Add paragraphs to 21.6.2.1 [new.delete.single]:

void operator delete(void* ptr) throw();
void operator delete(void* ptr, const std::nothrow_t&) throw();

[ The second signature deletion above is editorial. ]

Requires: If an implementation has strict pointer safety (6.6.4.4.3 [basic.stc.dynamic.safety]) then ptr shall be a safely-derived pointer.

-10- ...

void operator delete(void* ptr, const std::nothrow_t&) throw();

Requires: If an implementation has strict pointer safety (6.6.4.4.3 [basic.stc.dynamic.safety]) then ptr shall be a safely-derived pointer.

-15- ...

Add paragraphs to 21.6.2.2 [new.delete.array]:

void operator delete[](void* ptr) throw();
void operator delete[](void* ptr, const std::nothrow_t&) throw();

[ The second signature deletion above is editorial. ]

Requires: If an implementation has strict pointer safety (6.6.4.4.3 [basic.stc.dynamic.safety]) then ptr shall be a safely-derived pointer.

-9- ...

void operator delete[](void* ptr, const std::nothrow_t&) throw();

Requires: If an implementation has strict pointer safety (6.6.4.4.3 [basic.stc.dynamic.safety]) then ptr shall be a safely-derived pointer.

-13- ...

Add paragraphs to 21.6.2.3 [new.delete.placement]:

void operator delete(void* ptr, void*) throw();

Requires: If an implementation has strict pointer safety (6.6.4.4.3 [basic.stc.dynamic.safety]) then ptr shall be a safely-derived pointer.

-7- ...

void operator delete[](void* ptr, void*) throw();

Requires: If an implementation has strict pointer safety (6.6.4.4.3 [basic.stc.dynamic.safety]) then ptr shall be a safely-derived pointer.

-9- ...