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.

Reply via email to