According to TDPL, 5.9.1 "Pseudo Members and the @property Attribute", D allows pseudo-member notation:
"if a.fun(b,c,d) is seen but fun is not a member of a's type, D rewrites that as fun(a,b,c,d) and tries that as well."
Apparantly this is only true for arrays, and even for arrays it does not work in some cases:
void gun(ref int[]) { }
void sun(ref int[], int v) { }
int[] global;
ref int[] fun() { return global; }
@property ref int[] funProp() { return global; }
void main() {
gun(global); // works
sun(global, 0); // works
global.gun; // works (but shouldn't ?)
global.gun(); // works
global.sun(0); // works
fun().gun; // works (but shouldn't ?)
fun().gun(); // works
fun().sun(0); // works
funProp.gun; // works (but shouldn't ?)
funProp.gun(); // does not work but should
funProp.sun(0); // does not work but should
}
Comment #1 by bus_dbugzilla — 2011-11-18T07:33:09Z
Duplicate of issue 3382, issue 2883, and issue 662
*** This issue has been marked as a duplicate of issue 3382 ***