On Monday, October 03, 2016 11:13:52 Jonathan M Davis via Digitalmars-d wrote:
> template isStaticMember(T, string member)
> {
>     static if (!__traits(hasMember, T, member))
>         enum bool isStaticMember = false;
>     else
>     {
>         import std.meta : AliasSeq;
>         import std.traits : FunctionTypeOf;
>         alias sym = AliasSeq!(__traits(getMember, T, member))[0];
>
>         static if (__traits(isStaticFunction, sym))
>             enum bool isStaticMember = true;
>         else static if (is(FunctionTypeOf!sym == function) &&
>                         is(FunctionTypeOf!(typeof(&sym)) == function))
>         {
>             enum bool isStaticMember = false;
>         }
>         else
>         {
>             enum bool isStaticMember = !__traits(compiles, sym.offsetof) &&
>                                        __traits(compiles, &sym);
>         }
>     }
> }

Well, since I took the time to write it, I created a PR for it:

https://github.com/dlang/phobos/pull/4834

So, if anyone sees problems with my implementation, go poke holes in it.

- Jonathan M Davis

Reply via email to