mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
63 lines
996 B
D
63 lines
996 B
D
/* REQUIRED_ARGS: -preview=dip1000
|
|
*/
|
|
|
|
// Related to: https://github.com/dlang/dmd/pull/8504
|
|
|
|
@safe:
|
|
|
|
void betty()(ref int* r, return scope int* p)
|
|
{
|
|
r = p; // infer `scope` for r
|
|
}
|
|
|
|
void boop()(ref int* r, scope int* p)
|
|
{
|
|
r = p; // infer `scope` for r, `return` for p
|
|
}
|
|
|
|
void foo(scope int* pf)
|
|
{
|
|
scope int* rf;
|
|
betty(rf, pf);
|
|
boop(rf, pf);
|
|
}
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=22801
|
|
struct Wrapper
|
|
{
|
|
int* ptr;
|
|
|
|
this(return ref int var) @safe
|
|
{
|
|
this.ptr = &var;
|
|
}
|
|
}
|
|
|
|
void main() @safe
|
|
{
|
|
int i;
|
|
auto w = Wrapper(i);
|
|
auto wt = WrapperT!()(i);
|
|
}
|
|
|
|
void assign(ref scope int* x, return ref int y) @safe
|
|
{
|
|
x = &y;
|
|
}
|
|
|
|
// https://issues.dlang.org/show_bug.cgi?id=22967
|
|
// inference of `return ref` when assigned to first parameter
|
|
struct WrapperT()
|
|
{
|
|
int* ptr;
|
|
|
|
this(ref int var) @safe
|
|
{
|
|
this.ptr = &var;
|
|
}
|
|
|
|
static void assignInferred(ref scope int* xi, ref int yi) @safe
|
|
{
|
|
xi = &yi;
|
|
}
|
|
}
|