On Wednesday, 8 August 2012 at 23:21:32 UTC, Ellery Newcomer
wrote:
say I have
template T(alias fn) {
}
class Foo {
int i();
void i(int);
}
alias T!(Foo.i) Biz;
Is there a way to get a handle to both of the overloads of
Foo.i inside T?
Actually, all I really need for that is to get 'Foo.i' out of
fn.
mangleof looks promising..
import std.typetuple : TypeTuple;
template Id(alias a) { alias a Id; }
template T(alias fn) {
alias Id!(__traits(parent, fn)) Parent;
// use Id template so we cannot alias __traits result directly
static assert(is(Parent == Foo));
enum FnName = __traits(identifier, fn);
alias TypeTuple!(__traits(getOverloads, Parent, FnName))
Overloads;
// use TypeTuple template so we cannot alias __traits result
directly
pragma(msg, typeof(Overloads[0])); // prints int()
pragma(msg, typeof(Overloads[1])); // prints void(int)
}
class Foo {
int i();
void i(int);
}
alias T!(Foo.i) Biz;