[Issue 9062] AddrExp should distinguish the existence of property resolution.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Dec 5 16:26:08 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=9062
--- Comment #14 from Kenji Hara <k.hara.pg at gmail.com> 2012-12-05 16:26:04 PST ---
(In reply to comment #13)
> C++ has one special case where (e) means something different from e. (Few
> people know that case exists.)
>
> Adding such to D makes me very nervous. I think it's a sound principle that any
> expression can be parenthesized without altering its meaning, it's important
> for anything that generates source code (like mixins are wont to do).
It's sure. But, &propfunc is one of the key point for the more property
enforcement.
- If &propfunc returns an address of returned value, all function related meta
templates will be broken (e.g. FunctionTypeOf).
- If &propfunc returns a function pointer of propfunc, all semantics are kept
intact. But, to get an address of returned value from propfunc will become
impossible in range of using built-in-language features.
I have thought a library solution, but this is ugly to me.
import std.algorithm : move;
T identity(T)( T t) { return move(t); }
ref T identity(T)(ref T t) { return t; }
int g;
@property ref int propfunc() { return g; }
void main() {
auto p1 = &propfunc; // p1 is function pointer
auto p2 = &identity(propfunc); // p2 is int*
// identity(propfunc) makes an expression,
// then getting an address of returned value can be succeeded.
assert(p2 == &g);
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list