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!

Reply via email to