Bug 7757 – Inout function with lazy inout parameter doesn't compile
Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-03-23T19:04:00Z
Last change time
2013-01-22T09:44:19Z
Keywords
pull, rejects-valid
Assigned to
nobody
Creator
hsteoh
Comments
Comment #0 by hsteoh — 2012-03-23T19:04:06Z
Code:
inout(int) func(int x, lazy inout(int) defaultVal) {
return defaultVal;
}
void main() {
int x = func(1,2);
const(int) cx = func(1,2);
}
Compiler error:
test2.d(4): Error: inout on return means inout must be on a parameter as well for pure @safe inout(int)()
test2.d(8): Error: inout on return means inout must be on a parameter as well for inout(int)()
test2.d(9): Error: inout on return means inout must be on a parameter as well for inout(int)()
Clearly, this is wrong, because inout *is* on the second parameter. It's being masked by the "lazy", as can be proven by removing "lazy" and it will compile.