``` struct Foo { ubyte width, length; // by reference bool opEquals(ref const(Foo) other) const pure @safe { if (width != other.width) return false; if (length != other.length) return false; return true; }
// by value bool opEquals(const(Foo) other) const pure @safe { return opEquals(other); } } ```It works for me, but I'm curious - will compiler always recognize what to call and I can avoid recursion and stack overflow or I shouldn't do so?