On Thu, 23 May 2013 09:50:28 -0400, Artur Skawina <[email protected]>
wrote:
On 05/23/13 15:12, Don wrote:
On Thursday, 23 May 2013 at 11:08:16 UTC, Artur Skawina wrote:
struct Packet(uint TYPE) {
immutable uint type = TYPE;
// ...
}
But that allows you to write:
auto w = Packet!(7)(6);
which sets type to 6 !
No, it doesn't - this is why the "const and initialized, but still
mutable" class
is a bad idea. Modifying already initialized immutable data needs to be
forbidden.
There is a misconception here. The data is not fully initialized when the
ctor is called, it's just that the memory where the instance lives happens
to have a bit pattern in it with the value 7 when the ctor gets it.
It's no different than a non-default initialized immutable being
"initialized" to 0 first before you set it. It's just you get to define
the bit pattern instead of using 0.
In order to disable the behavior above, you have to disable the default
ctor, define a non-default ctor, or generate using a static
method/function.
-Steve