On 07/03/13 17:43, H. S. Teoh wrote: > On Wed, Jul 03, 2013 at 05:41:25PM +0200, Artur Skawina wrote: >> On 07/03/13 17:27, H. S. Teoh wrote: >>> On Wed, Jul 03, 2013 at 05:15:48PM +0200, John Colvin wrote: >>>> On Wednesday, 3 July 2013 at 15:03:46 UTC, Artur Skawina wrote: >>>>> On 07/03/13 16:52, John Colvin wrote: >>>>>> Is there any way to take the address of any of an overloaded set >>>>>> of functions? >>>>>> >>>>>> import std.stdio; >>>>>> >>>>>> void foo(int a){ writeln("overload int"); } >>>>>> void foo(long b){ writeln("overload long"); } >>>>>> >>>>>> void main() >>>>>> { >>>>>> auto b = &foo; //ambiguous => error >>>>>> b(2); //valid for either overload >>>>>> } >>>>> >>>>> void function(long) b = &foo; >>>>> >>>>> artur >>>> >>>> Thanks, that works >>> >>> This is interesting. How does C++ handle this? (Or does it?) >> >> The same - the context determines which overload is chosen, and >> ambiguity is an error. > > Oh, so it tells the difference by whether you write > > void (*p)(int) = foo; > > or > > void (*p)(long) = foo; > > ?
Yep. Things like void c(void (*fp)(long), long a) { fp(a); } c(foo, 2); work as expected too. > I guess that makes sense. The context dependence isn't ideal, but what's the alternative?... artur