digitalmars.D.bugs - [Issue 20115] New: std.typecons.Rebindable / UnqualRef do not work
- d-bugmail puremagic.com (51/51) Aug 08 2019 https://issues.dlang.org/show_bug.cgi?id=20115
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. --
Aug 08 2019