Confusion regarding struct lifecycle

Matt Elkins via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Feb 16 17:54:20 PST 2016


On Tuesday, 16 February 2016 at 10:45:09 UTC, Marc Schütz wrote:
> On Tuesday, 16 February 2016 at 04:00:27 UTC, Mike Parker wrote:
>> On Tuesday, 16 February 2016 at 03:39:00 UTC, Matt Elkins 
>> wrote:
>>> On Tuesday, 16 February 2016 at 03:31:51 UTC, maik klein 
>>> wrote:
>>>> In D you can always call Foo.init even with @disable this(),
>>>
>>> Foo.init can be called implicitly (not just explicitly)? If 
>>> so, why even have @disable this(), if it offers no guarantees?
>>
>> IMO, this is a bug. It should have to be explicit, just as it 
>> is with a single struct instance.
>
> There is likely some bug here. In the example, though, the 
> elements _are_ constructed explicitly (except foos[4]). This is 
> legitimate, as the first assignment of an element in a 
> construct counts as construction.

The elements are not constructed explicitly with Foo.init; they 
are constructed explicitly with a user-defined Foo constructor. 
Since default construction leads to a semantically-invalid object 
in the non-reduced case, I was expecting that a @disabled default 
constructor would cause the compiler to complain on attempts to 
default-construct the struct. Preferably this would be on any 
attempt to do so, including explicit calls to Foo.init, but at a 
minimum I would want it to complain on attempts to do so 
implicitly. Otherwise there don't appear to be any useful 
guarantees offered by @disable this().


More information about the Digitalmars-d-learn mailing list