On 02.07.2017 06:45, Walter Bright wrote:
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.


I think the example demonstrate the reason. It either returns the argument or an immutable global. If the argument is immutable, so is the return value, otherwise the return value is const.

Reply via email to