Can someone tell me what the compiler thought I was trying to do?

H. S. Teoh hsteoh at qfbox.info
Fri Oct 14 22:17:52 UTC 2022


On Fri, Oct 14, 2022 at 09:51:54PM +0000, WhatMeWorry via Digitalmars-d-learn 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?

Depending on what your range type was, it may not necessarily do
*nothing* (it may mutate the range).  But as Andrei put it, "range
mutation functions change content, not topology". It *returns* the new
"topology", i.e., the new range after the removal; so you need to assign
it to the original range in order to keep it up-to-date.

Given that this particular trap crops up regularly, perhaps some sort of
warning ought to be added. Once the @nodiscard DIP is accepted &
implemented this should be easy to do.


T

-- 
"I'm running Windows '98." "Yes." "My computer isn't working now." "Yes, you already said that." -- User-Friendly


More information about the Digitalmars-d-learn mailing list