Why getting private member fails using getMember trait in a template?

Alexandru Ermicioi via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Sep 26 03:10:37 PDT 2015


Suppose we have, two modules:

module testOne;

import std.traits;

template getMember(alias T, string member) {
     alias getMember = Identity!(__traits(getMember, T, member));
}

module app;
import testOne;
import std.traits;

class TestOne {

     private {
         int property;
     }

     public {
         int func() {
             return 0;
         }
     }
}


template getMember(alias T, string member) {
     alias getMember = Identity!(__traits(getMember, T, member));
}

void main() {
     pragma(msg, fullyQualifiedName!(__traits(getMember, TestOne, 
"property")));
     pragma(msg, fullyQualifiedName!(app.getMember!(TestOne, 
"property")));
     pragma(msg, fullyQualifiedName!(testOne.getMember!(TestOne, 
"property")));
}

First two statements execute and I get fully qualified name, 
while the third one fails with next error (dmd version v2.067.1):
src/testOne.d(6): Error: class app.TestOne member property is not 
accessible
src/app.d(26): Error: template instance 
testOne.getMember!(TestOne, "property") error instantiating
src/app.d(26):        while evaluating pragma(msg, 
fullyQualifiedName!(testOne.getMember!(TestOne, "property")))


More information about the Digitalmars-d-learn mailing list