UFCS doesn't work in some cases
Danyal Zia via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Sep 9 10:58:14 PDT 2014
Hi,
I don't know if this has been mentioned before, but I found two
strange cases where UFCS doesn't work.
Case # 1: When the functions for UFCS are defined inside main
scope
class Rect {
int x = 20;
int y = 20;
}
void main() {
import std.stdio : writeln;
int area(Rect rect) {
return rect.x * rect.y;
}
auto rect = new Rect;
rect.area.writeln; // Error: no property 'area' for type
'main.Rect'
}
Put that 'area' definition outside the main body and it works
fine.
Case # 2: When using UFCS in 'with' scope
class Rect {
int x = 20;
int y = 20;
}
int area(Rect rect) {
return rect.x * rect.y;
}
void main() {
import std.stdio : writeln;
auto rect = new Rect;
with(rect) {
area.writeln; // Error: function main.area (Rect rect) is not
callable using argument types ()
}
}
As far as I know, UFCS are designed to make it easy to extend the
class for specific applications, however, without the ability to
use UFCS for those cases, it limits its usefulness. Are these
oversights/bugs? Or is their any rationale behind the decision to
not implement UFCS for them?
Danyal
More information about the Digitalmars-d-learn
mailing list