monarch_dodra:

struct S
{
    int* p;
}
struct S2
{
    int* p;
    this(int){};
}

void main()
{
    S a;
    S* pa;
    //auto b  = S;
    auto pb = new S;
    auto c  = S.init;
    //auto pc = ???
    auto d  = S();
    auto pd = new S();
    auto e  = S2(5);
    auto pe = new S2(5);
}

Tangential to your discussion: this needs to be allowed, because this removes one unnecessary special case/limit, avoiding the need to write some stupid boilerplate constructor code (I have written tons of those):

struct Foo {
    int x, y;
}
void main() {
    auto f = new Foo(5, 10);
}


The currently usable workaround is silly in a language like D:

struct Foo {
    int x, y;
}
void main() {
    auto f = new Foo;
    *f = Foo(5, 10);
}

Bye,
bearophile

Reply via email to