I've recently discovered the want for an opIndexCall override in D. For this: struct Y { ... Y function() f; } struct X { char[][] keys; Y[] values; opIndex() opIndexAssign() } Y myF(){ Y y; return y; } X z; z["hello"] = &myF; z["hello"](); // <-- can't do that. Y function() a; // have to do this? a = z["hello"]; // and this a(); // and this?