[Issue 17729] dmd says cast expression is "not an lvalue", but it can be used as one in other contexts
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Sep 19 15:22:55 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=17729
er.krali at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |er.krali at gmail.com
--- Comment #1 from er.krali at gmail.com ---
Furthermore, it doesn't work with ref parameters either:
---
struct S {
int i;
}
void fun(ref S s, int i) {
s.i = i;
}
void main() {
shared S s;
/* This fails:
onlineapp.d(17): Error: function onlineapp.fun(ref S s, int i) is not
callable using argument types (S, int)
onlineapp.d(17): cannot pass rvalue argument cast(S)s of type S
to parameter ref S s
fun(cast(S) s, 1);
*/
(*(cast (S*) &s)).fun(1); // Nasty workaround
assert (s.i == 1);
}
---
I also can't understand why the workaround works at all, the result of
dereferencing a pointer should surely be a rvalue?
Is that also a bug?
--
More information about the Digitalmars-d-bugs
mailing list