October 21, 2016
This very simple stuff:

class Item
{
    alias children this;
    Item[] children;
    void populate()
    {
        children ~= new Item;
        assert(children.length == 1);
    }
}

void main()
{
    Item root = new Item;
    root.populate;
}

leads to an assertion failure. Am I too tired to see the error or do you think it's a bug ?
October 21, 2016
On 10/21/2016 06:55 PM, Basile B. wrote:
> This very simple stuff:
>
> class Item
> {
>     alias children this;
>     Item[] children;
>     void populate()
>     {
>         children ~= new Item;
>         assert(children.length == 1);
>     }
> }
>
> void main()
> {
>     Item root = new Item;
>     root.populate;
> }
>
> leads to an assertion failure. Am I too tired to see the error or do you
> think it's a bug ?

Bug. `alias this` is tried too eagerly.

What happens: The alias this of `new Item` is evaluated, leading to `children ~= [];`.