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

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


On 02.07.2017 05:13, Walter Bright wrote:
> On 7/1/2017 3:12 PM, Timon Gehr wrote:
>> 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.
> 
> If const(inout(T)) is reduced to inout(T), it works.

Counterexample:

const(inout(char))[] foo(bool condition, inout(char)[] chars){
     if(!condition) return "condition failed!";
     return chars;
}

Turn const(inout(char)) into inout(char) and the example no longer 
compiles. (Nor should it.)


More information about the Digitalmars-d mailing list