On 8/8/17 2:56 PM, ag0aep6g wrote:
On 08/08/2017 08:34 PM, Johan Engelen wrote:
How would you express the function interface intent that a
reference to a class may not be null?
For a function "void foo(Klass)", calling "foo(null)" is valid. How do
I express that that is invalid? (let's leave erroring with a compile
error aside for now)
Something equivalent to C++'s pass by reference: "void foo(Klass&)".
[snip]
But you can pass null in a ref parameter:
----
void f(ref int x) @safe {}
void main() @safe
{
int* p = null;
f(*p);
}
----
Note that C++ also can do this, so I'm not sure the & is accomplishing
the correct goal:
void foo(Klass&);
int main()
{
Klass *k = NULL;
foo(*k);
}
However, the in contract does actually enforce the requirement.
-Steve