The following code results in the static assert in the constructor being triggered, even though I would have thought no constructor would have been called. I know that there is an easy fix for this (move the static if outside the constructor), but it still seems like it doesn't make sense.

enum Foo
{
    A,
    B,
}

struct Bar(Foo foo)
{
    static if (foo == Foo.A)
    {
        float x = 0.5;
        long y = 1;
    }
    else static if (foo == Foo.B)
    {
        int p = 1;
    }

    this(long exp, float x)
    {
        static if (foo == Foo.A) {
            this.y = exp;
            this.x = x;
        } else {
            static assert(0, "Not implemented");
        }
    }
}

void main()
{
    Bar!(Foo.B) x;
}

Reply via email to