When adding an explicit constructor such as ```this(string fileName)```, this is "supposed" to remove the "default" constructor. Then the developer needs to add back the default constructor.

But in this example, variable ```a4``` constructs just fine, and one can't add a default constructor, which is commented out.

There is a way to force the issue, by adding ```@disable this();```, but that seems like brute force.

Why does the default parameterless constructor still exist after creating an explicit constructor ```this(string fileName)```?

Does this have something to do with the difference between structs and classes? That is, that structs "always" have a default parameterless constructor, unless ```@disable(this);``` is added.

source/app.d  -- It compiles and runs.
```
void main() {
        auto a1 = Archive("records");
        // auto a2 = Archive("");
        // auto a3 = Archive(null);
        auto a4 = Archive();
}

struct Archive {
        string fileName;

        // @disable this();  // Disable the default constructor
        // This won't compile
        // this()
        // {
        //      this.fileName = "default_file_name";
        // }

        this(string fileName)
        in (fileName.length > 0)
        {
                this.fileName = fileName;
        }
}

```

Reply via email to