On Thursday, 9 May 2013 at 01:08:28 UTC, Meta wrote:
I can't get the structs to be evaluated at compile time, so I guess that's a lost cause.

Well, structs can be evaluated at compile-time but can't be value template parameters. You can do a small trick in this case though:

http://dpaste.1azy.net/c2188c90

struct Test(int N)
{
        enum n = N;
        
        auto add(int i)()
        {
                return Test!(n + i)();
        }
        
        alias n this;
}

void main()
{
        import std.stdio;
        enum a = Test!5();
        enum b = Test!3();
        writeln(a.add!b());
}

Will this do?

But actually this feels more like a task for CTFE. You can write a normal opAdd that does bounds check at run-time and then add "if (!__ctfe) assert(0);" to guarantee it will never be used in real run-time.

Reply via email to