Am 23.04.2012 09:14, schrieb Namespace:
I made several tests with NotNull yesterday and actually they all passed.
In special cases i didn't get a compiler error but then a runtime error
is better then nothing. :)
But there is still my problem with this:
void foo(NotNull!(Foo) n) {
}
void bar(Foo n) {
}
in my optinion it must exist a way that both
NotNull!(Foo) nf = new Foo();
foo(nf);
bar(nf);
and furhtermore
Foo f = new Foo();
foo(f);
bar(f);
compiles.
We need some hack, implicit cast or compiler cast that cast or passes
Foo to NotNull!(Foo).
Any suggestions?
If you replace
alias _notNullData this;
with
@property T _notNullDataHelper()
{
assert(_notNullData !is null);
return _notNullData;
}
alias _notNullDataHelper this;
It will not be possible to assign to _notNullData
It will still be possbile to use from other modules
NotNull!T will implicitly convert to T (your first case)
However T will not implicitly convert to NotNull!T (as far as I know
such a implict conversion is not possible in D, i suggested a @implicit
modifier for a constructor to allow such implicit type conversions, but
it was rejected)
Kind Regards
Benjamin Thaut