This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
[Accepted as a DR at the November, 2023 meeting.]
Subclause 7.6.2.9 [expr.delete] paragraph 12 specifies:
Access and ambiguity control are done for both the deallocation function and the destructor (11.4.7 [class.dtor], 11.4.11 [class.free]).
It is unclear what that means. In particular, ambiguity checking is part of overload resolution, and access checking requires a point of reference.
Proposed resolution (approved by CWG 2023-08-25):
Change in 7.6.2.9 [expr.delete] paragraph 6 as follows:
If the value of the operand of the delete-expression is not a null pointer value and the selected deallocation function (see below) is not a destroying operator delete, evaluating the delete-expressionwill invokeinvokes the destructor (if any) for the object or the elements of the array being deleted. The destructor shall be accessible from the point where the delete-expression appears. In the case of an array, the elementswill beare destroyed in order of decreasing address (that is, in reverse order of the completion of their constructor; see 11.9.3 [class.base.init]).
Change in 7.6.2.9 [expr.delete] paragraph 10
If more than one deallocation function is found, theThe deallocation function to be called is selected as follows:
- ...
Unless the deallocation function is selected at the point of definition of the dynamic type's virtual destructor, the selected deallocation function shall be accessible from the point where the delete-expression appears.
Remove 7.6.2.9 [expr.delete] paragraph 12:
Access and ambiguity control are done for both the deallocation function and the destructor (11.4.7 [class.dtor], 11.4.11 [class.free]).