allMembers and getMember traits behavior

Jacob Carlborg doob at me.com
Fri Jun 21 06:15:42 PDT 2013


On 2013-06-21 15:04, Martin wrote:
> 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

Can you use a string instead of getMember?

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list