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

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Sat Jul 1 15:12:34 PDT 2017


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)).


More information about the Digitalmars-d mailing list