Currently we can't filter out function overloads which are non-accessible. As soon as one of a functions overloads is inaccessible the getOverloads trait will fail, essentially making the getProtection trait also unusable. For example: foo.d: ----- module foo; struct S { private void x(int) { } // private overload public void x(float) { } // public overload } ----- ----- module test; import foo; void main() { foreach (member; __traits(allMembers, S)) { // Error: struct foo.S member x is not accessible foreach (overload; __traits(getOverloads, S, member)) { // too late, already errored out static if (__traits(getProtection, overload) == "public") { // ... do something if accessible } } } } ----- Some comments: https://github.com/D-Programming-Language/phobos/pull/1331#issuecomment-18915427 https://github.com/D-Programming-Language/phobos/pull/1331#issuecomment-18918513
This compiles in todays compiler. Closing as w4m.