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")))

Reply via email to