This is a bit of a side discussion because the RTInfo can't *change* the type, it can only look at it. It is more like a centralized place to static asserts or maybe static data than an AST macro.

But...

On Thursday, 16 January 2014 at 19:32:10 UTC, Namespace wrote:
The problem on a library NotNull struct is: nobody will use it, because it requires NotNull on both sides, by the caller and by the callee:

That's a lot of the benefit: the type system forces you to handle it sooner rather than later, so you can see where the invalid state came from.

    NotNull!A na = NotNull!A(new A());

This could be easily automated though with a helper function:

NotNull!T create(T, Args...)(Args args) {
    return assumeNotNull(new T(args));
}

// use it! notice that it is notnull already
auto na = create!A();


And then you can just use it.

Also it is far more readable and easier to write as a contract

That's what I tend to do now but the advantage of NotNull!() is catching it earlier.

Reply via email to