On 05/22/2010 05:08 PM, strtr wrote:
== Quote from Ary Borenszweig (a...@esperanto.org.ar)'s article
Ary Borenszweig wrote:
strtr wrote:
Sorry, should have included this :)
----
module main;
import std.string;
import std.stdio;
enum ENUM { A,B }
char[] toString(ENUM e_){return "enum";}
void main (){
writefln( toString(3) );
writefln( toString(ENUM.A) );
}
--
main.d(10): Error: function main.toString (ENUM) does not match
parameter types (int)
main.d(10): Error: cannot implicitly convert expression (3) of type
int to ENUM
----
That's not overloading,
Overloading is defining many functions with the same name but different
type arguments.
you are expecting an implicit conversion from
int to ENUM. Maybe if you cast 3 to ENUM, but still... no ENUM value
will be found for 3. What are you trying to do?
Well, actually, I was expecting std.string.toString(int) to be called for the
int
and my toString(ENUM) for the enum..?
That would work except
a) walter's hijacking fetish; if you want to overload a function with
one imported from an external module, you'd have to do something like
import std.string: toString;
(it strikes me that this is a necessary product of a loose type system)
From a discussion with walter a while back, I gathered not possible.
b) std.string.toString isn't a function - it's a template