On Saturday, 16 December 2023 at 22:44:16 UTC, Dennis wrote:
That's because `m[f] = 1` initializes the associative array to
something non-null. If you pass a `null` AA to a function which
adds things, the caller will still have a null pointers. You
can initialize a non-null empty AA like this:
```D
uint[Foo] m = new uint[Foo];
```
Then, `m` can be passed by value and you can make additions or
removals which the caller sees, unless you assign a new AA in
the function.
Thanks Dennis. I'll have to tweak my mental model of what's
happening. I was picturing a std::map-like thing that was passed
by reference, but instead it seems like 'm' is a pointer to a
std::map, that is initialized on use if null. (I think it's that
latter part that gives the illusion of being already initialized.)