digitalmars.D - immutable constructor and semantics of two construction syntaxes
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (17/17) Apr 13 2013 When immutable constructors are implemented, will there be a difference
- Timon Gehr (4/21) Apr 14 2013 I guess so. But it does not really make sense to declare an immutable
- deadalnix (4/37) Apr 14 2013 I was about to answer exactly the same.
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
Apr 13 2013
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? AliI guess so. But it does not really make sense to declare an immutable constructor if the struct instances implicitly convert between mutable and immutable.
Apr 14 2013
On Sunday, 14 April 2013 at 08:03:16 UTC, Timon Gehr wrote:On 04/14/2013 02:48 AM, Ali Çehreli wrote: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).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? AliI guess so. But it does not really make sense to declare an immutable constructor if the struct instances implicitly convert between mutable and immutable.
Apr 14 2013