On 7/2/2017 1:12 AM, Sönke Ludwig wrote:
The idea is to be able to write: string result = foo(true, "bar");

If it is declared as:

    inout(char)[] foo(bool condition, inout(char)[] chars);

your specific case will work as expected. Perhaps you meant:

   char[] s;
   string result = foo(true, s);

which will never work, even if const inout is a type, because the returns in the function body do NOT determine the return type's inout meaning. Only the type of the argument supplied to the inout parameter does that.


However, in this case it can be also argued that supporting this specific case adds it's own complexity. The concept of const(inout(T)) definitely sounds like one of the harder ones to explain. So I'd probably still opt for simplifying the conversion hierarchy.

Neither I nor anyone here seems to understand its purpose. The existence of it is likely a significant contributor to peoples' confusion about inout.

It's my fault as I should have noticed this getting slipped into the compiler.

Reply via email to