import std.stdio;
import std.meta;
import std.traits;
struct Foo {
int a;
void foo1(int a) {}
void foo2(string a, int b) {}
}
class Bar {
int b;
void bar1(int a) {}
void bar2(Foo a, int b) {}
}
void print_functions(T)() {
writeln(T.stringof);
foreach(field; __traits(allMembers, T)) {
alias member = Alias!(__traits(getMember, T, field));
static if(isFunction!(member)) {
writefln(" %s: %s", field, typeof(member).stringof);
}
}
}
void main() {
print_functions!(Foo);
print_functions!(Bar);
}