Bug 20115 – std.typecons.Rebindable / UnqualRef do not work with inout

Status
NEW
Severity
normal
Priority
P3
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2019-08-08T15:50:05Z
Last change time
2024-12-01T16:35:23Z
Assigned to
No Owner
Creator
Harry Vennik
Moved to GitHub: phobos#9776 →

Comments

Comment #0 by htvennik — 2019-08-08T15:50:05Z
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.
Comment #1 by robert.schadek — 2024-12-01T16:35:23Z
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