C++17 added [[nodiscard]]
.
C++20 added the use of [[nodiscard]]
on empty
methods, e.g. vector::empty()
-- maybe, to avoid user confusion with the method clear (i.e. calling empty() accidentally to clear the vector).
Why didn't C++20 use this opportunity to add [[nodiscard]]
to unique_ptr::release
?
Is there a valid reasonable scenario in which one would call unique_ptr::release
without taking the returned value?
In the same manner of avoiding user confusion (if this was the reason for adding [[nodiscard]]
to the empty
methods) - the name release
was always very confusing, sounds like, well... something is going to be released here.
Adding [[nodiscard]]
could fix this name issue, in a way.
This is addressed in the paper that added [[nodiscard]]
to many of the functions. From P0600R1 this is the remark about adding [[nodiscard]]
to unique_ptr::release()
Titus: at Google 3.5% of calls would fail, but analysis showed that it was correct (but weird ownership semantics). See reflector email.