I have defined a opCmp function to overload comparison operators, then how can I use it correctly?
I can use it like this: int b = t1.opCmp(info); and is it right like this: int b = t1 < info; In my test code, I get different value for b. What can I do? Thanks for helps. //============= //Test code: //============= import std.stdio; import std.conv; import std.file; import std.algorithm; import std.range; import std.array; import std.format; import std.path; import std.ascii; import std.utf; import std.process; public final class LogLevel { @property public static LogLevel Trace() { if( m_Trace is null ) m_Trace = new LogLevel("Trace", 0); return m_Trace; } private static LogLevel m_Trace; @property public static LogLevel Info() { if( m_Info is null ) m_Info = new LogLevel("Info", 2); return m_Info; } private static LogLevel m_Info; public string getName() { return name; } private int ordinal; private string name; public static LogLevel FromString(string levelName) { if (levelName.empty()) { throw new Exception("levelName"); } return Trace; } public int opCmp(LogLevel level1) { int result = 0; if( this.Ordinal > level1.Ordinal) result = 1; else if( this.Ordinal == level1.Ordinal) result = 0; else result = -1; writefln("result == %d", result); return result; } @property package int Ordinal() { return this.ordinal; } private this(string name, int ordinal) { this.name = name; this.ordinal = ordinal; } } int main(string[] args) { LogLevel t1 = LogLevel.Trace; LogLevel t2 = LogLevel.Trace; LogLevel info = LogLevel.Info; int a = t1 > t2; writefln("a == %d", a); int b = t1.opCmp(info); writefln("b == %d", b); b = t1 < info; writefln("b == %d", b); b = t1 > info; writefln("b == %d", b); return 0; } //=============