On Friday, August 24, 2012 02:00:22 Namespace wrote: > > I would expect you to be able to do > > > > test(NotNullable!Foo(new Foo)); > > > > and with a helper function, you could have something like > > > > test(notNullable(new Foo)); > > > > - Jonathan M Davis > > But then you have an lvalue and cannot receive it as "ref > NotNullable!Foo". Your struct would be copied with the (default) > postblit ctor every time you send it to "test", or am I wrong?
If you passed it a directly constructed NotNullable!Foo or the result of a function, then it wouldn't be copied. It would be moved. http://stackoverflow.com/questions/6884996/questions-about-postblit-and-move- semantics And even if it _were_ copied, we're talking about a struct that just holds a class reference, so copying it would be essentially the same as copying the reference. I wouldn't expect NotNullable to even _have_ a postblit constructor, meaning that copying it would use memcpy, which would be very fast. If you have to worry about the efficiency of passing NotNullable!T to a function, then there's something very wrong. - Jonathan M Davis