Defaut initialization of structs

Meta jared771 at gmail.com
Tue Oct 14 22:46:07 UTC 2025


On Tuesday, 14 October 2025 at 00:32:04 UTC, Steven Schveighoffer 
wrote:
> On Monday, 13 October 2025 at 14:13:26 UTC, Jonathan M Davis 
> wrote:
>> And if a struct defines a static opCall which can be called 
>> with no arguments, then
>>
>>     S s;
>>     auto s = S.init;
>>
>> will properly initialize the struct, whereas
>>
>>     auto s = S();
>>
>> will do whatever the static opCall does (and there's no 
>> guarantee that the static opCall even returns a value let 
>> alone that it returns an S). So, in that situation, you almost 
>> certainly don't want to be using S() (and if you do, it's 
>> because you know exactly what type you're dealing with and how 
>> it will behave).
>
> FYI, one thing I learned which actually quite sucks about 
> `opCall`, is that this also tries to call *non-static opCall*.
>
> ```d
> struct S {
>    int opCall() => 1;
> }
>
> void main() {
>    auto s = S(); // error
> }
> ```
>
> Oh, and add a parameter to opCall? Still tries to call it.
>
> It's one wart I wish we could fix. There's a reason why most 
> people don't use opCall, it's just hard to deal with.
>
> -Steve

I reported this bug back in February, and Dennis submitted a pull 
request to fix it just yesterday:
https://github.com/dlang/dmd/pull/21973


More information about the Digitalmars-d-learn mailing list