Andrei Alexandrescu Wrote:

> I plan to add a Nullable struct to Phobos (akin to C#'s Nullable, 
> Boost's Optional).
> 
> Apparently a good design is to define Optional!T with a minimum of 
> member functions (ideally none) and have it use the "alias this" feature 
> to masquerade as a T. That way Optional!T looks and feels much like a T, 
> except that it supports a function
> 
> bool isNull(T)(Optional!T value);
> 
> Am I on the right track? If so, what is the name you'd prefer for this 
> artifact?
> 
> 
> Andrei


I just recently converted tons of COM headers in win32 to D (gotta love 
extern(C++)) and I really like how they hint the compiler of what parameters 
are used for. They have all sorts of macros like __in, __inout, __out, 
__in_opt, __inout_opt, __out_opt.

Why can't these be used in D too and implicitly add the appropriate contracts 
to the function:

void foo(in_opt int* a) { ... }

can be the same as

void foo(in int* a)
in { assert(a); }
body { ... }

I know I'm trying to push a lot of library stuff to the language spec, but it 
would just be so much more convenient that way. in_opt would be semantically 
the same as in, with the added contract.

Reply via email to