Why do "const inout" and "const inout shared" exist?

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Sat Jul 1 18:22:05 PDT 2017


On Saturday, 1 July 2017 at 23:08:40 UTC, Andrei Alexandrescu 
wrote:
> On 07/01/2017 06:12 PM, Timon Gehr wrote:
>> On 01.07.2017 23:47, Andrei Alexandrescu wrote:
>>> Walter looked at http://erdani.com/conversions.svg and said 
>>> actually "const inout" and "const inout shared" should not 
>>> exist as distinct qualifier groups, leading to the simplified 
>>> qualifier hierarcy in 
>>> http://erdani.com/conversions-simplified.svg.
>>>
>>> Are we missing something?
>> 
>> I don't think so.
>> 
>>> Is there a need for combining const and inout?
>>> ...
>> 
>> In DMD's implementation, yes. (Combinations of qualifiers are 
>> represented as integers instead of nested AST nodes.)
>> 
>> const(const(T))     = const(T)
>> const(immutable(T)) = immutable(T)
>> const(inout(T))     = ?
>> 
>> It used to be the case that const(inout(T)) = const(T), but 
>> this is wrong, because if we replace 'inout' by 'immutable', 
>> the result should be immutable(T), not const(T). Hence 
>> const(inout(T)) cannot be reduced further.
>> 
>> The simplified hierarchy is enough though. The more complex 
>> one can be derived from it. Since S -> const(S) for all S, it 
>> directly follows that inout(T) -> const(inout(T)) for all T 
>> (we can choose S=inout(T)).
>
> Thanks! Well I do want to have a hierarchy with all possible 
> qualifier combinations for utmost clarity. Only the 
> combinations listed are valid, e.g. there's no "immutable 
> inout" or whatever.
>
> Vaguely related question: should "const" convert implicitly to 
> "const shared"? The intuition is that the latter offers even 
> less guarantees than the former so it's the more general type. 
> See http://erdani.com/conversions3.svg.
>
> That would be nice because we have "const shared" as the unique 
> root of the qualifier hierarchy.
>
>
> Andrei

I cannot think so a single time I ever used const inout.


More information about the Digitalmars-d mailing list