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

Walter Bright via Digitalmars-d digitalmars-d at puremagic.com
Sat Jul 1 21:45:48 PDT 2017


On 7/1/2017 9:12 PM, Timon Gehr wrote:
> 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.)

I don't think that matters. There's no reason to write const(inout) for a return 
value.


More information about the Digitalmars-d mailing list