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.
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
*** Issue 20165 has been marked as a duplicate of this issue. ***
@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
This has been addressed by the addition of @mustuse: https://github.com/dlang/dmd/pull/13589