Bug 5464 – Attribute to not ignore function result

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-01-20T02:59:14Z
Last change time
2022-08-15T14:04:54Z
Keywords
bootcamp, pull
Assigned to
No Owner
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2011-01-20T02:59:14Z
Ignoring the result of some functions like string replace(), or the C realloc(), or in general the result of strongly pure functions in D, is a programmer mistake that often enough is a sign of a bug presence. To face this problem GNU C has the warn_unused_result attribute: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html (This is more useful in C than D because in C there are no true built-in exceptions, so error return values are common, and sometimes ignoring them is a mistake.) Some C lints require a void cast where you don't want to use a function result: cast(void)foo(x); In a language the default is different and where you don't want to use a function result you have to add a specific annotation: unused foo(x); In D an attribute like @nodiscard (name invented by Andrej Mitrovic) may turn ignoring return values into errors. To silence this error the programmer uses something like cast(void). So the error message may be: "Error: unused result of @nodiscard function. Use cast(void) to override it." Strongly pure functions may produce this error even if you don't use @nodiscard.
Comment #1 by bearophile_hugs — 2011-02-28T04:19:31Z
In Phobos there are several functions that have no important effects (despite sometimes not being pure) that are useful just for their return value, like isSorted, front, setDifference, etc. @nodiscard is useful for them all. See also bug 3882
Comment #2 by snarwin+bugzilla — 2020-08-24T21:03:01Z
*** Issue 20165 has been marked as a duplicate of this issue. ***
Comment #3 by dlang-bot — 2020-09-19T02:42:16Z
@pbackus created dlang/dmd pull request #11765 "[PoC] Add @nodiscard attribute" fixing this issue: - Add @nodiscard attribute Fixes issue 5464 - Attribute to not ignore function result https://github.com/dlang/dmd/pull/11765
Comment #4 by razvan.nitu1305 — 2022-08-15T14:04:54Z
This has been addressed by the addition of @mustuse: https://github.com/dlang/dmd/pull/13589