Chris Nicholson-Sauls wrote:
I've noticed a shortcoming that I somehow hadn't come across before. The
same issue exists in the current Phobos2, so it isn't anything new.
Apparently (and this may be known to all but me already) in order to
use an array type, you must also use its element type. Doing otherwise
results in tripping a static assert.
Example:
module test2;
import std.variant;
alias Algebraic!(void, string) var_t;
void main () {
var_t foo = "quux";
}
This was an oversight caused by implementing opIndex, which I now fixed
with credit. Thanks!
Now if you haven an Algebraic containing an array, you won't be able to
call its opIndex directly; it will throw an exception. This is because
opIndex wants to return the same type as this, and that type is unable
to hold the element type of the array!
[snip]
Specifically the statement (*result = (*me)[index];) triggers it, by
spawning an opAssign!(elem_type). I'm not sure how to cleanly alter it
right off the top of my head.
----------
On the other hand, the new form This[] works fine, so far. The only
missing feature is an opApply().
Ok, I filed a bug report on your behalf.
The form This[This]... Using 'foo.get!(table_t)[k] = v;' results in a
range violation. For the moment, they are essentially immutable hashes.
Could actually be fine for a number of purposes.
That's because foo.get returns by value. Try using peek, which returns a
pointer. Could you please post some code if that doesn't work for your case?
----------
If I get some extra free time this weekend (assuming V-day isn't the
death of me) I'll hack away at it some and see if I can't figure some
things out, on all counts above.
Oh, and THANKS. :)
Advantage #1 of marrying a foreigner: you get to convince her that V-day
is an artificial event created for commercial interests only because
they want to sell blood diamonds. Watching "Blood Diamond" together a
week before V-day recommended.
Andrei