On Thursday, 20 October 2022 at 14:03:10 UTC, tchaloupka wrote:
Hi,
I've found strange behavior where:
```D
import std.stdio;
struct Foo
{
@disable this(this);
int x;
}
void test(Foo[] foos...)
{
foreach (ref f; foos) {
writeln(&f, ": ", f.x);
f.x = 0;
}
}
void main()
{
Foo f1 = Foo(1);
Foo f2 = Foo(2);
writeln("f1: ", &f1);
writeln("f2: ", &f2);
test(f1, f2);
writeln("f1: ", f1.x);
writeln("f2: ", f2.x);
}
```
Compiles fine (no error on passing noncopyable arguments to the
function), but there are other objects passed to the function
as they aren't cleared out in the caller scope.
Shouldn't it at least protest that objects can't be passed to
the function as they aren't copyable?
Have you looked at the ast?