invariant/const class storage class

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Oct 1 18:46:00 PDT 2008


Simen Kjaeraas wrote:
> 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"...

Tackulatum? Was that tacitum?

Andrei




More information about the Digitalmars-d mailing list