August 08, 2019 [Issue 20115] New: std.typecons.Rebindable / UnqualRef do not work with inout | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=20115 Issue ID: 20115 Summary: std.typecons.Rebindable / UnqualRef do not work with inout Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: phobos Assignee: nobody@puremagic.com Reporter: htvennik@gmail.com 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. -- |
Copyright © 1999-2021 by the D Language Foundation