[Issue 20115] New: std.typecons.Rebindable / UnqualRef do not work with inout
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Aug 8 15:50:05 UTC 2019
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 at puremagic.com
Reporter: htvennik at 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.
--
More information about the Digitalmars-d-bugs
mailing list