[Issue 10850] Inout substituted incorrectly for delegates/fptrs in inout function signature
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sat Sep 13 14:47:15 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=10850
--- Comment #8 from Sobirari Muhomori <dfj1esp02 at sneakemail.com> ---
If different inout functions are independent:
---
inout(int)* delegate(inout(int)*) f(inout(int)* x)
{
inout(int)* g(inout(int)* y) { return y; }
//outer inout variables are seen as const
//inout(int)* g(inout(int)* y) { return x; }
int z;
int* a = g(&z); //ok like any other inout function
return &g;
}
void h()
{
int x;
//received true inout delegate
inout(int)* delegate(inout(int)*) q = f(&x);
}
---
If inout is bound to the outer function:
---
inout(int)* delegate(inout(int)*) f(inout(int)* x)
{
//work freely with local inout variables
inout(int)* g(inout(int)* y) { return x; }
int z;
//int* a = g(&z); //can't convert mutable to inout
return &g;
}
void r(inout(int)* x, inout(int)* delegate(inout(int)*) dg)
{
dg(x);
}
void h()
{
int x;
//can't receive inout delegate
int* delegate(int*) q = f(&x);
//function can indirectly mutate its inout argument
r(&x, (int* y){ ++*y; });
assert(x==1);
}
---
Not sure, which is better.
--
More information about the Digitalmars-d-bugs
mailing list