Why can we not use __traits across protection?

Alex AJ at gmail.com
Tue Apr 2 14:56:38 UTC 2019


Module X:

class x
{
    private int x;
}

Module Y:

import X;

moduleName!(x.x);

or

__traits(getProtection, x.x);

Deprecation: `X.x.x.x` is not visible from module `Y`
Error: class `X.x.x` member `x` is not accessible

My use case is a little more complicated but I have two issues.


1: I have to import the module even though the type passed is 
valid(I'm using templates which are passed the type with a module 
import and I'd expect the module import to be "passed" along with 
the type so that I don't have to import it to use __traits or 
reflection.

2. If a member is protected then __traits and others fails. This 
makes absolutely no sense. Protection is used for run time, not 
compile time. What is strange is private methods give a 
deprecation warning but private fields give a deprecation error.




More information about the Digitalmars-d mailing list