Overloading doesn't work like described in "The D programming language"
Michael Kremser
mkspamx-usenet at yahoo.de
Wed Dec 7 13:35:04 PST 2011
Hi!
On pages 145 and 146 (§ 5.5.1) of "The D programming language" there is
an example with overloading a function with uint, long, and a
parameterized type. I tried to reproduce that using a similar example:
<code>
module main;
import std.stdio;
void overloadme(uint number)
{
writeln("This is overloadme with uint.");
}
void overloadme(long number)
{
writeln("This is overloadme with long.");
}
void overloadme(T)(T number)
{
writeln("Generic overloadme called.");
}
int main(string[] argv)
{
overloadme(25);
overloadme("Bla");
writeln("\nFinished");
readln();
return 0;
}
</code>
However, if I try to compile that code, the compiler yields an error in
line 15:
Error: template main.overloadme(T) conflicts with function
main.overloadme at main.d(5)
In the book it says that "non-generic functions are generally preferred
to generic functions, even when the non-generic function need an
implicit conversion". But in my case that doesn't work.
Can anyone explain me what's going on here? Is the example in the book
wrong or did I misinterpret something?
Best regards
Michael
More information about the Digitalmars-d
mailing list