On 10.06.2016 13:02, Satoshi wrote:
Hello,
why operator overloading is not working as a static methods through the
UFCS?
...

It's an arbitrary limitation.
https://issues.dlang.org/show_bug.cgi?id=8062

(The specification has been updated in the meantime, it now documents the limitation explicitly. https://dlang.org/spec/operatoroverloading.html)

I need overload a << operator in this way:

enum PlatformID {
     None,
     Trinix,
     Unix,
     MacOS,
     Windows
}

PlatformID toPlatformID(string platform) {
     switch (platform.toLower()) {
         case "trinix":  return PlatformID.Trinix;
         case "unix":    return PlatformID.Unix;
         case "macos":   return PlatformID.MacOS;
         case "windows": return PlatformID.Windows;
         default:        return PlatformID.None;
     }
}

void opBinary(string op)(ref PlatformID plat, auto ref const string str)
if (op == "<<") {
     plat = toPlatformID(str);
}


void thisIsTest() {
     PlatformID id;
     id << "x86_64"; // this is not working
     id.opBinary!("<<")("test"); // but this works O.K.

}

Yuck. This should at the very least be opAssign instead.

Reply via email to