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

Reply via email to