On Sunday, 3 May 2015 at 17:22:00 UTC, filcuc wrote:
Hi all,
i'm working in the generation of the code but i'm failing in extracting a function return type when invoking the ReturnType!(T) type trait and mixing it with __traits(getMember) function.
Can anyone help me? or explaining what is happenning?
i've created a gist here: https://gist.github.com/filcuc/14c3a6cac89beb69cccd

The error message is the following:

main.d-mixin-58(58): Error: template instance main.Person.ReturnType!(name) does not match template declaration ReturnType(func...) if (func.length == 1 && isCallable!func) main.d-mixin-58(58): Error: template instance std.traits.ReturnType!(Monitor) does not match template declaration ReturnType(func...) if (func.length == 1 && isCallable!func) main.d(73): Error: template instance main.IterateUDA!(Person) error instantiating

Try adding the following around your 'string returnType = ...' code:

static if(isSomeFunction!(__traits(get member, T, member))
{
    ...
}

The problem is that you're looping over all the fields in T, including the data members which obviously don't have a return type. I guess ReturnType should probably use a static assert to give a better error message.

Reply via email to