allMembers and getMember traits behavior

Martin martinbbjerregaard at gmail.com
Fri Jun 21 06:04:13 PDT 2013


module test;

void test()
{


     foreach (member; __traits(allMembers, Client))
     {
         pragma(msg, member); // Prints all members fine, 
including "value"
     }

     // This line fails
     static if(__traits(getProtection, __traits(getMember, 
TestClass, "value")) == "public")
     {
         pragma(msg, "value is public");
     }
     else
     {
         pragma(msg, "value is not public");
     }

}

module testclass;

class TestClass
{
private:
     int value;
}

When using the allMembers trait, the private "value" member of 
TestClass is included, but when trying to retrieve that member 
using the getMember trait, it fails to compile with test.d(13): 
Error: class main.TestClass member value is not accessible

Is that intended behavior or a bug? I can't see why the getMember 
trait should not be able to retrieve private members when 
allMembers trait is


More information about the Digitalmars-d mailing list