/* 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; } }