On 01/23/2019 07:19 AM, Jacob Shtokolov wrote:

> Expressions like `User.id == 10`, `User.age > 18`, etc. should return a
> struct instead of a bool (let's call it `struct BinaryExpression`).

Have you considered 'alias this'?

struct BinaryExpr(T)
{
  T left;
  T right;
  Op op;

  bool value() const {
    final switch (op) with (Op) {
      case Equals:
        return left == right;
      case NotEquals:
        return left != right;
    }
  }

  alias value this;
}

> So I'm making the two versions of opEquals: one returns a
> BinaryExpression, and the second - a boolean value.

Yeah, that can't work. Remove the bool-returning one and your code works with the 'alias this' above.

Ali

Reply via email to