On Wed, Jul 03, 2013 at 06:07:07PM +0200, Artur Skawina wrote: > 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?... [...]
Explicit syntax for specifying overloads? ;-) Not like that would happen in D, though. T -- Error: Keyboard not attached. Press F1 to continue. -- Yoon Ha Lee, CONLANG