set_default_resource
Section: 20.4.4 [mem.res.global] Status: C++20 Submitter: Casey Carter Opened: 2017-05-09 Last modified: 2021-02-25
Priority: Not Prioritized
View all other issues in [mem.res.global].
View all issues with C++20 status.
Discussion:
The specification of set_default_resource
in N4659
20.4.4 [mem.res.global] reads:
memory_resource* set_default_resource(memory_resource* r) noexcept;-4- Effects: If
-5- Postconditions:r
is non-null, sets the value of the default memory resource pointer tor
, otherwise sets the default memory resource pointer tonew_delete_resource()
.get_default_resource() == r
. -6- Returns: The previous value of the default memory resource pointer. -7- Remarks: […]
It is apparent that the effects specified in para 4 cannot — and indeed should not — achieve the
postcondition specified in para 5 when r
is null.
[2017-05-13, Tim comments]
This is the same issue as LWG 2522, which just missed the Fundamentals TS working draft used for the merge. A similar resolution (simply striking the Postconditions: paragraph) might be better.
Previous resolution [SUPERSEDED]:
This wording is relative to N4659.
Modify 20.4.4 [mem.res.global] as follows:
memory_resource* set_default_resource(memory_resource* r) noexcept;-4- Effects: If
-5- Postconditions: Ifr
is non-null, sets the value of the default memory resource pointer tor
, otherwise sets the default memory resource pointer tonew_delete_resource()
.r
is non-null,get_default_resource() == r
. Otherwise,get_default_resource() == new_delete_resource()
. -6- Returns: The previous value of the default memory resource pointer. -7- Remarks: […]
[2017-06-13, Casey Carter revises proposed wording]
I suggest to strike the Postconditions paragraph ([mem.res.global]/5) completely, as in LWG 2522
[2017-06-15, Moved to Tentatively Ready after 6 positive votes on c++std-lib]
Proposed resolution:
This wording is relative to N4659.
Modify 20.4.4 [mem.res.global] as follows:
memory_resource* set_default_resource(memory_resource* r) noexcept;-4- Effects: If
r
is non-null, sets the value of the default memory resource pointer tor
, otherwise sets the default memory resource pointer tonew_delete_resource()
.-5- Postconditions:-6- Returns: The previous value of the default memory resource pointer. -7- Remarks: […]get_default_resource() == r
.