D 特质(hasMember)与类一起工作吗?

D 特质(hasMember)与类一起工作吗?,d,D,根据_traits(hasMember,…)应该与任何具有成员的类型一起工作,但我无法获得将其与类一起编译的代码。请注意以下代码段: struct A { int foo; } static assert(__traits(hasMember, A, "foo")); 这将编译(尽管它不会链接,因为没有main)。但是如果我将“struct A”更改为“class A”,则会触发静态断言,代码将不会编译。我在bug追踪器里找不到任何东西,看起来这是眼图上的一个大E。我做错什么了吗 -

根据_traits(hasMember,…)应该与任何具有成员的类型一起工作,但我无法获得将其与类一起编译的代码。请注意以下代码段:

struct A {
    int foo;
}

static assert(__traits(hasMember, A, "foo"));
这将编译(尽管它不会链接,因为没有main)。但是如果我将“struct A”更改为“class A”,则会触发静态断言,代码将不会编译。我在bug追踪器里找不到任何东西,看起来这是眼图上的一个大E。我做错什么了吗

--编辑:
以getMember为例,如果foo是静态的,那么hasMember似乎只在类上工作。或者,我可以实例化一个A,并用测试实例,以获得一个非静态foo。问题是,我需要在编译时测试类的非静态成员是否存在。

经过一些思考后,我认为这是预期的行为。hasMember应该与getMember一起使用,或者如果hasMember为true,则设置或调用该成员必须是合法的,这似乎是合理的。显然,这对于类来说毫无意义——除非字段或方法是静态的,否则在没有实例的情况下无法设置或调用它。也许instanceHasMember特征是有序的,或者至少是文档中的注释

现在,我使用经过时间测试的

  is(typeof(mixin(`thing.`~member)))
在编译时测试这个