struct A { int foo(string s) { return 0; } } static assert(__traits(getOverloads, A.init, "foo")[0]("hi") == 0); static assert(__traits(getOverloads, A.init, "foo", true)[0]("hi") == 0); struct B { int foo()(int i) { return 1; } int foo(string s) { return 0; } } alias a = __traits(getOverloads, B.init, "foo", true); static assert(__traits(getOverloads, B.init, "foo")[0]("hi") == 0); static assert(__traits(getOverloads, B.init, "foo", true)[0]("hi") == 0); struct C { static int foo()(int i) { return 1; } int foo(string s) { return 0; } } static assert(__traits(getOverloads, C.init, "foo")[0]("hi") == 0); static assert(__traits(getOverloads, C.init, "foo", true)[0]("hi") == 0); static assert(__traits(getOverloads, C.init, "foo", true)[1](7) == 1);