invariant/const class storage class

Simen Kjaeraas simen.kjaras at gmail.com
Wed Oct 1 18:21:06 PDT 2008


On Wed, 01 Oct 2008 16:23:32 +0200, Yigal Chripun <yigal100 at gmail.com>  
wrote:

> Andrei Alexandrescu wrote:
>> Yigal Chripun wrote:
>>> Walter Bright wrote:
>>>> Simen Kjaeraas wrote:
>>>>> Is this really correct behavior? How then are we supposed to
>>>>> initialize our
>>>>> invariant objects?
>>>> Currently, create them as mutable ones, then cast them to invariant.
>>>
>>> I understand casting as breaking the type system. shouldn't there be a
>>> way to create invariant objects without the cast?
>>> an invariant constructor seems a good way to solve this. any plans on
>>> adding such a feature to D2?
>>
>> There are plans.
>>
>>> I think it can work like this:
>>>
>>> class A {
>>>   this(params) {}   // [1]
>>>   invariant this(params) {}  // [2]
>>> }
>>>
>>> // create a mutable object - will use type [1] c-tors.
>>> auto a = new A(params);
>>>
>>> // create an invariant object - will use type [2] c-tors.
>>> invariant a = new A(params);
>>>
>>> // create a const object - will use type [1] or [2] c-tors.
>>> const a = new A(params);
>>>
>>> in the const case, if there are two c-tors which only differ by
>>> invariant-ness of the c-tor using either will create ambiguity and
>>> therefore should be a compile-time error.
>>
>> Way, way, way more complicated than this.
>>
>> Andrei
>
> May I ask what are the complications?

"Mortis Portalis Tackulatum - and he's still breathing"...

-- 
Simen



More information about the Digitalmars-d mailing list