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.

Reply via email to