Hi,

I want to validate whether a class contains a specific attribute. I have the attribute name as compile time string. This string could either be a direct attribute of the class or a hierarchy (TextSettings.Font.Size).

As example T is the class Label and p.name contains the text "TextSettings.Font.Size".
TextSettings and Font are again classes.

mixin(`static if (__traits(compiles, `~fullyQualifiedName!T~`.`~p.name~`)) {...}

__traits(compiles, ...) only works for symbols of the same module, but not for symbols contained in other modules. I reduced it to this example coding:

m1.d
-----------------
module m1;

import m2;

class Foo
{
        int foo;
}

void main()
{
        static assert(__traits(compiles, m1.Foo.foo));
        static assert(__traits(compiles, m2.Bar.bar));
}

m2.d
---------------
module m2;

class Bar
{
        int bar;
}

Why does the second assert throws? What can I use instead of __traits(compiles,...) ?

Kind regards
André

Reply via email to