On Tuesday, November 13, 2012 22:37:37 Peter Alexander wrote: > On Tuesday, 13 November 2012 at 21:34:28 UTC, Rob T wrote: > > I'm wondering why overloading has been implemented to only > > match on the argument list rather than the full signature which > > includes the return type? I know I would use it if it was > > available. > > If it worked on return type, how would it decide the overload? > > int foo() { ... } > string foo() { ... } > > void bar(int x) { ... } > void bar(string y) { ... } > > auto z = foo(); // what foo? > bar(foo()); // what foo?
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