Thread overview | ||||||
---|---|---|---|---|---|---|
|
October 10, 2014 __traits(getMember) works only the second time | ||||
---|---|---|---|---|
| ||||
Hi, by executing the example source code, following output is returned: Reference: Child false true At first "childStr" is not found, then it is found? Is this a bug? Kind regards André ----------------- module app; import test; class Child : Parent { mixin ComponentTemplate; @property string childStr(){return "";} } void main() { auto child = new Child(); child.getParameters(); } ----------------- module test; template Params(this MyType) { string[] Params() { pragma(msg, "Reference: " ~ MyType.stringof); pragma(msg, is(typeof(__traits(getMember, MyType, "childStr")))); pragma(msg, is(typeof(__traits(getMember, MyType, "childStr")))); return []; } } mixin template ComponentTemplate() { private enum parameters = Params!(typeof(this)); string[] getParameters() { return parameters; } } class Parent { @property string parentStr(){return "";} } |
October 10, 2014 Re: __traits(getMember) works only the second time | ||||
---|---|---|---|---|
| ||||
Posted in reply to andre | On 10/10/2014 8:08 p.m., andre wrote:
> Hi,
>
> by executing the example source code,
> following output is returned:
>
> Reference: Child
> false
> true
>
> At first "childStr" is not found, then it is found?
> Is this a bug?
>
> Kind regards
> André
>
> -----------------
>
> module app;
>
> import test;
>
> class Child : Parent
> {
> mixin ComponentTemplate;
> @property string childStr(){return "";}
> }
>
> void main()
> {
> auto child = new Child();
> child.getParameters();
> }
>
> -----------------
>
> module test;
>
> template Params(this MyType)
> {
> string[] Params()
> {
> pragma(msg, "Reference: " ~ MyType.stringof);
> pragma(msg, is(typeof(__traits(getMember, MyType, "childStr"))));
> pragma(msg, is(typeof(__traits(getMember, MyType, "childStr"))));
> return [];
> }
> }
>
> mixin template ComponentTemplate()
> {
> private enum parameters = Params!(typeof(this));
>
> string[] getParameters()
> {
> return parameters;
> }
> }
>
> class Parent
> {
> @property string parentStr(){return "";}
> }
Wrong trait for the job. Use hasMember instead.
Although interesting use case. Could be a bug somewhere in there.
|
October 10, 2014 Re: __traits(getMember) works only the second time | ||||
---|---|---|---|---|
| ||||
Posted in reply to andre | Certainly a bug; please file a report at https://issues.dlang.org/ |
October 10, 2014 Re: __traits(getMember) works only the second time | ||||
---|---|---|---|---|
| ||||
Posted in reply to Rikki Cattermole | I use the syntax "is(typeof(__traits(getMember, MyType, "childStr")))" to check whether a member is public visible or not. (The example above is only a reduced example) By the way hasMember works correctly. I will file an issue. Kind regards André On Friday, 10 October 2014 at 07:25:28 UTC, Rikki Cattermole wrote: > On 10/10/2014 8:08 p.m., andre wrote: > > Wrong trait for the job. Use hasMember instead. > Although interesting use case. Could be a bug somewhere in there. |
Copyright © 1999-2021 by the D Language Foundation