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

Reply via email to