monotonic_memory_resource::do_is_equal
uses dynamic_cast
unnecessarilySection: 20.4.6.3 [mem.res.monotonic.buffer.mem] Status: C++20 Submitter: Pablo Halpern Opened: 2017-07-14 Last modified: 2021-02-25
Priority: 0
View all other issues in [mem.res.monotonic.buffer.mem].
View all issues with C++20 status.
Discussion:
Section [mem.res.monotonic.buffer.mem], paragraph 11 says
bool do_is_equal(const memory_resource& other) const noexcept override;Returns:
this == dynamic_cast<const monotonic_buffer_resource*>(&other)
.
The dynamic_cast
adds nothing of value. It is an incorrect cut-and-paste from an example do_is_equal
for a more complex resource.
[2017-07-16, Tim Song comments]
The pool resource classes appear to also have this issue.
[2017-09-18, Casey Carter expands PR to cover the pool resources.]
Previous resolution: [SUPERSEDED]
Edit 20.4.6.3 [mem.res.monotonic.buffer.mem] as indicated:
bool do_is_equal(const memory_resource& other) const noexcept override;Returns:
this ==
.dynamic_cast<const monotonic_buffer_resource*>(&other)
[ 2017-11-01 Moved to Tentatively Ready after 7 positive votes for P0 on c++std-lib. ]
[2018-3-17 Adopted in Jacksonville]
Proposed resolution:
This resolution is relative to N4687.
Edit 20.4.5.4 [mem.res.pool.mem] as indicated:
boolsynchronized_pool_resource::do_is_equal(const memory_resource& other) const noexcept override;const memory_resource& other) const noexcept override;Returns:
this ==
.dynamic_cast<const synchronized_pool_resource*>(&other)
Strike 20.4.5.4 [mem.res.pool.mem] paragraph 10, and the immediately preceding declaration of unsynchronized_pool_resource::do_is_equal
.
Edit 20.4.6.3 [mem.res.monotonic.buffer.mem] as indicated:
bool do_is_equal(const memory_resource& other) const noexcept override;Returns:
this ==
.dynamic_cast<const monotonic_buffer_resource*>(&other)