opEquals() non-standard return type

Jacob Shtokolov jacob.100205 at gmail.com
Wed Jan 23 15:19:06 UTC 2019


Hi,

I'm trying to check whether it's possible to implement Python's 
SQLAlchemy-like query syntax in D, but I get stuck a bit.

Here is a simple example of what I want to achieve:

```
auto result = User.filter(User.id == 10);
result = User.filter(User.name == "John");
result = User.filter(User.age > 18);
```

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

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

However, when I want to use the same expression for the `if` 
operator, the compiler cannot decide what function to call and 
shows an error: "overloads bool(int b) and BinaryExpr!int(int b) 
both match argument list for opEquals".


I'm wondering, is that possible to declare multiple versions of 
opEquals() and evaluate them in the different places depending on 
return type?

Here is my test code to check: https://run.dlang.io/is/yTFHWp
Gist: 
https://gist.github.com/run-dlang/67ec42ca73d56d310e8ae765fabede69

Thanks!


More information about the Digitalmars-d-learn mailing list