there's a value passed as template parameter which is know at compile time (can be used with static if) but I don't know how can I pass it around and use in a property. Obviously enum deosn't work because it would be a local to the function. immutable would result in compiler can't read it at compile time. version doesn't work either because it isn't at module scope but a function.

full code:


struct S
{
        enum x = init!(false, 10);
        enum y = init!(true, 20);

        this(string s)
        {
                type = Type.type1;
        }

        this(int n)
        {
                type = Type.type2;
        }

        static auto init(bool v, int val)()
        {
                auto s = S();

                static if(v)
                {
                        s.type = Type.type1;
                }
                else
                {
                        s.type = Type.type2;
                }

                s.n = val;
                return s;
        }

        int value()
        {
                // would to use static if here or just
                // get rid of that check if type is Type.type1,
                // information which is available at init()
                // template function.
                if(type == Type.type2) {
                        // do something
                }

                return n;
        }

        Type type;
        int n;
}

enum Type
{
        type1,
        type2,
        type3
}

Reply via email to