Template apply
Sefly dereference all args
of types SharedPtr
, RcPtr
and IntrusivePtr
and forward them to callable alias fn
.
template apply(alias fn)
;
Ref args are copyied and non ref args are moved.
Contained Functions
Name | Description |
---|---|
apply |
Example
import btl .autoptr .shared_ptr;
import btl .autoptr .rc_ptr;
import btl .autoptr .intrusive_ptr;
import core .lifetime : move;
static class Foo{
ControlBlock!(int, int) c;
int i;
this(int i)pure nothrow @safe @nogc{
this .i = i;
}
~this()pure nothrow @safe @nogc{
i = -1;
}
}
()@safe{
auto a = SharedPtr!long .make(42);
auto b = RcPtr!float .make(3.14);
auto c = IntrusivePtr!Foo .make(123);
assert(a .useCount == 1);
assert(b .useCount == 1);
assert(c .useCount == 1);
int i = apply!((scope long* x, scope float* y, scope Foo z){
assert(a .useCount == 2);
assert(b .useCount == 2);
a = null;
b = null;
c = null;
assert(z .i != -1);
//x, y, z are still valid until end of the scope.
return z .i;
})(a, b, move(c));
assert(i == 123);
}();