On Wednesday, 28 May 2014 at 08:46:30 UTC, Rene Zwanenburg wrote:
The problem is the initialization of A.tree. Short answer, move
it to a constructor and it should work.
Now what I think is going on: default values for member fields
must be known at compile time. This is why structs can do
something like
struct S
{
int i = 5;
}
while they're not allowed to define a default constructor.
So it appears the tree is instantiated at compile time and
stored somewhere, and the reference to that instance is used as
the default value for A.tree. I didn't know this was possible
to do with reference type members, and perhaps it should be
disallowed. This is highly counter intuitive behavior esp. for
people coming from Java.
Thank you for the reply. Does this mean I should never initialize
classes/objects like that or is it more specific to RBT?
I guess structs have the same problem with classes/objects? That
makes struct that hold objects quite awkward to use, since you
can't define a default constructor for structs.
struct S
{
auto tree = new RedBlackTree!string();
}
PS Sorry for not posting this to the learn forum.