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