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