[Issue 15371] New: __traits(getMember) should bypass the protection
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sat Nov 21 02:16:52 PST 2015
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: nobody at puremagic.com
Reporter: bb.temp at 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/xrrptwihnvlxabswnper@forum.dlang.org
--
More information about the Digitalmars-d-bugs
mailing list