I don't think that opIndexAssign/opIndexOpAssign were ever a good idea. Yeah, it works fine when all you are doing is x[i] = y, but that doesn't scale, as you have found out. It's short-sighted.

x[i] is an L-value for arrays, so it should be for everything else where it makes sense. Consistency is paramount.

I know C++ had the problem with std::map where x[i] would construct an entry when x[i] didn't exist, but that was due to a bad design decision. Indexing should never perform an insertion. Force users to use an 'insert' function to add elements and indexing should only work when the key is found (throw an exception otherwise). Again, it's a matter of consistency. Accessing x[10] of a 5-element array doesn't expand the array, so accessing x["foo"] of an empty map shouldn't expand the map.

Am I missing something here?

Reply via email to