On Friday, 14 October 2022 at 21:51:54 UTC, WhatMeWorry wrote:
I lost about a half an hour troubleshooting some code of mine
which as it turned out to be resolved with just one line.
// paths.remove(i); // compiles fine but does nothing
paths = paths.remove(i); // works - what I erroneously thought
the previous line was doing
Is the first line nonsensical and should the compiler have at
least issued a warning?
At the moment, no. You should have read the documentation of the
function :-)
Note that remove does not change the length of the original
range directly; instead, it returns the shortened range. If its
return value is not assigned to the original range, the
original range will retain its original length, though its
contents will have changed:
You ignored the return value of a function you shouldn't have
ignored. It's not practical for the compiler to warn every time
you do that, as it currently can't know that you're *supposed* to
use it.
`@mustuse` was added to the language in 2.100.0 as an attribute
for `struct` or `union`, but not yet for functions, as explained
in the DIP:
https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1038.md#mustuse-as-a-function-attribute
If that ever gets expanded for use as a function attribute, then
it can be used in situations like this so that you must use the
return result. Until then, read the documentation!