On Wednesday, 30 April 2014 at 22:14:44 UTC, Walter Bright wrote:
On 4/30/2014 2:34 PM, Meta wrote:
On Wednesday, 30 April 2014 at 21:04:19 UTC, Walter Bright wrote:
On 4/30/2014 1:38 PM, Meta wrote:
Also, while we're thinking about static unittest, what about contracts? I've seen Bearophile suggest it quite a few times, and I agree that it'd be very useful to have contracts that are able to check a subset of function
contracts/object invariants at compile time.

Already have them - template constraints.

Your function needs to be a template for that.

Adding () turns a function into a function template. Also, static asserts.

Also, object invariants.

Easily handled with static asserts.

Just a thought, this might be a good idea for the problem of not knowing which condition fails when a template instantiation fails, i.e.:

auto reduce(alias fun, Args...)(Args args)
//We don't know which condition fails when this template fails to instantiate if (Args.length > 0 && Args.length <= 2 && isIterable!(Args[$ - 1]))
{
    //...
}

Instead we could do:


auto reduce(alias fun, Args...)(Args args)
static in
{
    assert(Args.length > 0);
    assert(Args.length <= 2);
    assert(isIterable!(Args[$ - 1]));
}
body
{
    //...
}

And the error message which show you exactly which condition failed. You could also just use static asserts in the contract, but the topic of this thread is about `static unittest`, which is more or less redundant as well.

Reply via email to