https://issues.dlang.org/show_bug.cgi?id=15371
Issue ID: 15371 Summary: __traits(getMember) should bypass the protection Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: bb.t...@gmx.com "__traits(getMember,...)" should always work, whatever is the member protection (as long as the symbol is a valid one). The current limitation is problematic because it prevents to write functions related to traits in a separate dedicated modules (e.g mylib.traits) Every time a "__traits(getMember,...)" has to be used the only solution to make it works with a private member is to write again and again the code (or to warp the function in a mixin template). Since there is also the traits verb "getProtection", it still would be possible to respect the protection or not. In case this wouldn't be clear, more concretly: ====================================== module mylib.traits; mixin template ScopedReachability() { bool isMemberReachableGood(T, string member)() if (is(T==class) || is(T==struct)) { return __traits(compiles, __traits(getMember, T, member)); } } bool isMemberReachableBad(T, string member)() if (is(T==class) || is(T==struct)) { return __traits(compiles, __traits(getMember, T, member)); } ===================================== module somemodule; class Foo { private: uint a,b,c; public: this() { foreach(member; __traits(allMembers, Foo)) static if (isMemberReachableBad!(Foo, member)) {/*a,b,c not detected*/} import mylib.traits; mixin ScopedReachability; // isMemberReachableGood is now a local func. static if (isMemberReachableGood!(Foo, member)) {/*a,b,c detected*/} } } ===================================== With a relaxed protection policy on the "getMember" verb, it would be possible to write reusable functions related to traits. Actually the problem prevents a lot of good template that would simplify the traits usage to be written. ===================================== see also: - https://issues.dlang.org/show_bug.cgi?id=15335 - http://forum.dlang.org/post/xrrptwihnvlxabswn...@forum.dlang.org --