24.03.2012 14:13, John написал:
Is there any way to refer to a specific function overload?

For example:

import std.stdio;
import std.traits;

void foo() {}
void foo(int x) {}

void main() {
    writeln(foo.mangleof);
    writeln(ParameterTypeTuple!(foo).stringof);
}

Both of these statements always refer to the first matching function. If I change the order of declarations for foo, the results change.

Is there a way to reference the second overload in this example?

I can use a function pointer with ParameterTypeTuple to get the correct result, but something like mangleof won't work, since that will return the mangle of the local function pointer instead of the original function.


import std.stdio;
import std.traits;

void foo() { writeln( "void" ); }
void foo( int x ) { writeln( x ); }

template getOverload( alias func, A... ) {
    void function(A) getOverload = &func;
}

void main() {
    writeln( getOverload!(foo, int).mangleof );
    writeln( ParameterTypeTuple!(getOverload!(foo, int)).stringof );
    getOverload!(foo, int)(42);
    getOverload!(foo)();
}

Will not hold for return types other than void, there may be some generic workaround (of course, you can pass return type as tempate parameter).

Reply via email to