2522. [fund.ts.v2] Contradiction in set_default_resource specification

Section: 8.8 [fund.ts.v2::memory.resource.global] Status: TS Submitter: Tim Song Opened: 2015-07-28 Last modified: 2017-07-30

Priority: 2

View all issues with TS status.

Discussion:

Addresses: fund.ts.v2

[memory.resource.global]/p7-8 says that the effects of set_default_resource(r) are

If r is non-null, sets the value of the default memory resource pointer to r, otherwise sets the default memory resource pointer to new_delete_resource().

and the operation has the postcondition

get_default_resource() == r.

When r is null, however, the postcondition cannot be met, since the call sets the default memory resource pointer to new_delete_resource(), and so get_default_resource() would return the value of new_delete_resource(), which is obviously not null and so cannot compare equal to r.

Previous resolution from Tim Song [SUPERSEDED]:

This wording is relative to N4480.

  1. Edit [memory.resource.global]/p8 as follows:

    -6- memory_resource* set_default_resource(memory_resource* r) noexcept;
    

    -7- Effects: If r is non-null, sets the value of the default memory resource pointer to r, otherwise sets the default memory resource pointer to new_delete_resource().

    -8- Postconditions: get_default_resource() == r if r is non-null; otherwise, get_default_resource() == new_delete_resource().

    […]

[2015-09-15 Geoffrey Romer comments and suggests alternative wording]

Let's just strike 8.8 [fund.ts.v2::memory.resource.global]/p8. The problem is that p8 is restating p7 incorrectly, but the solution is not to restate p7 correctly, it's to stop trying to restate p7 at all.

[2015-10, Kona Saturday afternoon]

Move to Tentatively ready

[2015-10-26]

Daniel adjusts wording to lib. fund. v2.

Proposed resolution:

This wording is relative to N4529.

  1. Edit [memory.resource.global]/p8 as follows:

    -6- memory_resource* set_default_resource(memory_resource* r) noexcept;
    

    -7- Effects: If r is non-null, sets the value of the default memory resource pointer to r, otherwise sets the default memory resource pointer to new_delete_resource().

    -8- Postconditions: get_default_resource() == r.

    […]