On Wednesday, 14 November 2012 at 02:01:56 UTC, Jonathan M Davis wrote:
It would also screw up covariant return types if overloading too the return type into account. I believe that the _big_ reason though is simply because the type of the expression is determined by the return type, not what it's assigned to. For instance, with how the language works, the type of the right- hand side of an assignment must always be determined independently of the type on the left, so the type of the expression on the right-hand side cannot depend on the type of the left. I suspect that it would complicate things considerably to try and make the return type have anything to do with function overloading. I'm sure that you could find it being discussions on it somewhere
online for other C-based laguages though.

Regardless, I've never even heard of a language which tried to include the return type in overload resolution. It sounds like a huge complication to me.

- Jonathan M Davis

I can envision simple ways for a programmer to supply hints to the compiler for easy resolution based on return type.

For example, when calling an overloaded function without assignment to anything:

int f() { ... }
void f() { ... }

f(); // should choose void return
(void)f(); // calls void return
(int)f(); // calls int return

In C++ there are conversion operators, which are not exactly the same as function overloading, but the correct function is selected based on the type on the left hand side.

Example

class A
{
   operator bool(){ return _b; }
   operator int(){ return _i; }
   int _i; bool _b;
}

A a;
bool b = a; // executes bool()
int i = a; // executes int()

Is there anything like C++ conversion operators in D? I have used conversion ops in C++ and may want to use a similar feature in D if available.


--rt

Reply via email to