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?


    void test(Foo..)(Foo foos)

I don't know if that's the 1:1 alternative, but that doesn't compile

onlineapp.d(23): Error: struct `onlineapp.Foo` is not copyable because it has a disabled postblit

Reply via email to