mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
44 lines
677 B
D
44 lines
677 B
D
// REQUIRED_ARGS: -preview=dip1021
|
|
|
|
void* malloc();
|
|
|
|
@live T* foo1(T)(T* p)
|
|
{
|
|
return p; // consumes owner
|
|
}
|
|
|
|
@live T* foo2(T)()
|
|
{
|
|
T* p = null;
|
|
return p; // consumes owner
|
|
}
|
|
|
|
@live T* foo3(T)(T* p)
|
|
{
|
|
scope T* q = p; // borrows from p
|
|
return p; // use of p ends borrow in q
|
|
}
|
|
|
|
@live T* foo4(T)(T* p)
|
|
{
|
|
scope T* bq = p; // borrow
|
|
scope const T* cq = p; // const borrow
|
|
return p; // ends both borrows
|
|
}
|
|
|
|
@live T* foo5(T)()
|
|
{
|
|
auto p = cast(T*) malloc();
|
|
scope b = p;
|
|
return p;
|
|
}
|
|
|
|
void test()
|
|
{
|
|
int* p;
|
|
foo1!int(p);
|
|
foo2!int();
|
|
foo3!int(p);
|
|
foo4!int(p);
|
|
foo5!int();
|
|
}
|