Thread overview
-preview=in deprecation warning
Apr 20, 2023
Jack Applegame
Apr 20, 2023
Dennis
Apr 20, 2023
Jack Applegame
April 20, 2023

Can anyone help me get rid of this depreciation?

struct Foo {
	string foo;
	string getFoo() const @safe { return foo; }
}

size_t bar(in Foo foo) @safe {
	return foo.getFoo().length;
}

void main() {
	Foo("hello").bar().writeln();
}
$ ldc2 -preview=in --run foo.d
foo.d(9): Deprecation: scope variable `foo` assigned to non-scope parameter `this` calling `getFoo`
$ ldc2 --version
LDC - the LLVM D compiler (1.32.1):
  based on DMD v2.102.2 and LLVM 15.0.7
April 20, 2023

On Thursday, 20 April 2023 at 09:14:48 UTC, Jack Applegame wrote:

>

Can anyone help me get rid of this depreciation?

Annotate getFoo with return scope:

struct Foo {
	string foo;
	string getFoo() return scope const @safe { return foo; }
}

April 20, 2023

On Thursday, 20 April 2023 at 09:41:13 UTC, Dennis wrote:

>

On Thursday, 20 April 2023 at 09:14:48 UTC, Jack Applegame wrote:

>

Can anyone help me get rid of this depreciation?

Annotate getFoo with return scope:

struct Foo {
	string foo;
	string getFoo() return scope const @safe { return foo; }
}

Wow. Thanks.
I tried this, but rearranged the return and scope like this

// doesn't work
string getFoo() scope return const @safe { return foo; }
// works
string getFoo() return scope const @safe { return foo; }