On Saturday, 22 August 2026 at 04:19:54 UTC, DanielG wrote:
This is actually a reduced example - I first noticed the problem when my class contained a struct with `@disable this`.
...
I would expect the human-provided constructor with default arguments to be matched even in the absence of a default/zero-arg constructor. From the output we can see that the provided constructor is the only one that ever matches/runs ... but if we `@disable this`, suddenly it refuses to match. This is surprising.

There's no need to `@disable this();` for a class with a defined constructor, as one would not be generated:
https://dlang.org/spec/class.html#implicit-base-construction

There seems to be a bug with default constructor arguments here, however you can workaround it by using a delegating constructor:

```d
import std.stdio;

struct S
{
        int i;
        @disable this();
}

class MyClass {
        S s;

        //this(string y = "hi") { // bug
        // workaround:
        this() { this("hi"); }
        this(string y) {
                writeln("hello from MyClass constructor");
                S tmp = {1};
                s = tmp;
        }
}

void main()
{
        // always works
        auto x = new MyClass("hi");

        // works now
        auto y = new MyClass;
}
```

Reply via email to