In functions it may be necessary (e.g. for scoping reasons) to assign the return value to a variable and return it later. If the return value is a inout/const/immutable class reference, this fails (cannot modify inout/const/immutable expression...). For const/immutable this is quite easily fixed using Rebindable, but not so for inout... ---- import std.typecons : Rebindable; class A { } class C { private A _a; @property const(A) aConst() const nothrow @nogc @safe { const A retVal; retVal = _a; // ERROR: cannot modify const expression retVal // in this simple case, the error could be avoided by assigning // directly in the declaration of retVal, but something like an // if or try/catch block may force to declare the variable separate // from assigning its value. return retVal; } @property const(A) aConstRebindable() const nothrow @nogc @safe { Rebindable!(const A) retVal; retVal = _a; // WORKS return retVal; } @property inout(A) aInoutRebindable() inout nothrow @nogc @safe { Rebindable!(inout A) retVal; retVal = _a; // ERROR: cannot modify inout expression retVal return retVal; } } ---- Same problem with UnqualRef, which does the same, but also removes shared.
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/9776 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB