On Tuesday, 17 April 2012 at 08:02:02 UTC, Namespace wrote:
Now i have something like this. It works and manipulates
lvalues so that i can pass my objects by ref to except null.
But is this smart?
class Bar {
public:
int x;
static ref Bar opCall(int x) {
static Bar b;
b = new Bar(x);
return b;
}
this(int x) {
this.x = x;
}
}
class Foo {
private:
Bar _bar;
public:
int y;
this() { }
this(ref Bar b) {
//assert(b !is null);
writefln("B.x %d", b.x);
}
}
Bar b = new Bar(42);
new Foo(b); // works
new Foo(null); // compiler error
new Foo(Bar(23)); // works
new Foo(Bar(25)); // works
But if I write
Bar bn;
new Foo(bn);
it works also and doesn't throw a compiler error.
To avoid this, I have to write an assert(obj !is null); again.
This really sucks. If anybody else works with my Code and puts a
null reference to any method he gets no compiler error and wonder
why he gets a runtime error instead.
Thats very annoying...