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