immutable constructor and semantics of two construction syntaxes

deadalnix deadalnix at gmail.com
Sun Apr 14 05:19:14 PDT 2013


On Sunday, 14 April 2013 at 08:03:16 UTC, Timon Gehr wrote:
> On 04/14/2013 02:48 AM, Ali Çehreli wrote:
>> When immutable constructors are implemented, will there be a 
>> difference
>> between the two syntaxes below?
>>
>> struct MyStruct
>> {
>>     int i;
>>
>>     // ... assume that MyStruct has both
>>     // mutable and immutable constructors ...
>> }
>>
>>     auto s0 = immutable(MyStruct)("some parameter");
>>
>>     immutable s1 = MyStruct("some parameter");
>>
>> The former syntax constructs an immutable literal, so the type 
>> of s0 is
>> deduced to be immutable.
>>
>> The latter syntax constructs a mutable literal and blits it to 
>> the
>> immutable s1.
>>
>> Should the former syntax call the immutable constructor and 
>> the latter
>> syntax call the mutable constructor?
>>
>> Ali
>
> I guess so. But it does not really make sense to declare an 
> immutable constructor if the struct instances implicitly 
> convert between mutable and immutable.

I was about to answer exactly the same.

Note that s1 should fail is immutable => mutable conversion can't 
be done implicitly (if MyStruct contains references).


More information about the Digitalmars-d mailing list