On 18/01/12 05:34, Jonathan M Davis wrote:
On Wednesday, January 18, 2012 02:14:41 F i L wrote:
Also, you can do:
import std.math;
import special = std.mathspecial;
void main()
{
writeln(special.erf(0.5));
}
See http://www.d-programming-language.org/module.html for more
information.
I believe that his argument is that when there is a conflict and one of the two
functions is deprecated (and you're not compiling with -d), then the
deprecated function shouldn't be considered as part of the overload set. I'm
not sure whether this is a good idea or not.
With the current situation, you're forced to qualify the non-deprecated
function, and your code will continue working after that (even after the
deprecated function has been removed), but you'll be stuck with unnecessarily
qualified function calls in the longe run.
On the other hand, if we were to switch to what the OP suggests, then different
if a function were deprecated and another matching function were added at the
same time, then your code would silently start calling the new function,
possibly resulting in incorrect behavior.
Regardless, since private functions are included in overload resolution (see
http://d.puremagic.com/issues/show_bug.cgi?id=1441 and more discussion of it
in http://d.puremagic.com/issues/show_bug.cgi?id=6180 ), I wouldn't expect
deprecated functions to be removed from overload resolution.
I'm not sure that that's the same. It's interesting to compare these two:
deprecated {
void foo1() {}
}
version(deprecated)
{
void foo2() {}
}
If compiled with -d, both foo1() and foo2() are identical.
If not compiled with -d, foo2() doesn't even exist.
But foo1() generates an error message if you try to use it.
Really the question is, should foo1() generate an error message if you
*might* be trying to use it? Or only if you are *definitely* trying to
use it?
My opinion is that it should be almost the same as foo2(): the
declaration exists ONLY for the purpose of generating a "must use -d" if
you try to call it. It's purely a service to help people migrate their
code. It should have no effect on people who have already migrated their
code.
On the bright side, the deprecated function won't be around in the long run,
so it's a temporary issue.
- Jonathan M Davis