Challenge
Jonathan M Davis via Digitalmars-d
digitalmars-d at puremagic.com
Mon Oct 3 08:19:53 PDT 2016
On Monday, October 03, 2016 23:19:19 Manu via Digitalmars-d wrote:
> Fill in the blank...
> I'm having a really hard time with this. I've made it work with a
> mountain of code, and I want to see what others come up with...
>
> If you succeed, put it in std.traits!
>
> Recommend, use latest DMD nightly. I find differences with latest
> nightly vs release.
>
> ----------------------------------------------------------------------------
> --- template isStaticMember(T, string member)
> {
> enum bool isStaticMember = [code goes here];
> }
>
>
> struct S
> {
> enum X = 10;
> enum Y
> {
> i = 10
> }
> struct S {}
> class C {}
>
> static int x = 0;
> __gshared int y = 0;
> static void f() {}
> static void f2() pure nothrow @nogc @safe {}
>
> shared void g() {}
>
> static void function() fp;
> __gshared void function() gfp;
> void function() fpm;
>
> void m() {}
> final void m2() const pure nothrow @nogc @safe {}
>
> inout(int) iom() inout { return 10; }
> static inout(int) iosf(inout int x) { return x; }
>
> @property int p() { return 10; }
> static @property int sp() { return 10; }
> }
>
> class C
> {
> enum X = 10;
> enum Y
> {
> i = 10
> }
> struct S {}
> class C {}
>
> static int x = 0;
> __gshared int y = 0;
> static void f() {}
> static void f2() pure nothrow @nogc @safe {}
>
> shared void g() {}
>
> static void function() fp;
> __gshared void function() gfp;
> void function() fpm;
>
> void m() {}
> final void m2() const pure nothrow @nogc @safe {}
>
> inout(int) iom() inout { return 10; }
> static inout(int) iosf(inout int x) { return x; }
>
> @property int p() { return 10; }
> static @property int sp() { return 10; }
> }
>
> static assert(!isStaticMember!(S, "X"), "!");
> static assert(!isStaticMember!(S, "Y"), "!");
> static assert(!isStaticMember!(S, "Y.i"), "!");
> static assert(!isStaticMember!(S, "S"), "!");
> static assert(!isStaticMember!(S, "C"), "!");
> static assert( isStaticMember!(S, "x"), "!");
> static assert( isStaticMember!(S, "y"), "!");
> static assert( isStaticMember!(S, "f"), "!");
> static assert( isStaticMember!(S, "f2"), "!");
> static assert(!isStaticMember!(S, "g"), "!");
> static assert( isStaticMember!(S, "fp"), "!");
> static assert( isStaticMember!(S, "gfp"), "!");
> static assert(!isStaticMember!(S, "fpm"), "!");
> static assert(!isStaticMember!(S, "m"), "!");
> static assert(!isStaticMember!(S, "m2"), "!");
> static assert(!isStaticMember!(S, "iom"), "!");
> static assert( isStaticMember!(S, "iosm"), "!");
> static assert(!isStaticMember!(S, "p"), "!");
> static assert( isStaticMember!(S, "sp"), "!");
>
> static assert(!isStaticMember!(C, "X"), "!");
> static assert(!isStaticMember!(C, "Y"), "!");
> static assert(!isStaticMember!(C, "Y.i"), "!");
> static assert(!isStaticMember!(C, "S"), "!");
> static assert(!isStaticMember!(C, "C"), "!");
> static assert( isStaticMember!(C, "x"), "!");
> static assert( isStaticMember!(C, "y"), "!");
> static assert( isStaticMember!(C, "f"), "!");
> static assert( isStaticMember!(C, "f2"), "!");
> static assert(!isStaticMember!(C, "g"), "!");
> static assert( isStaticMember!(C, "fp"), "!");
> static assert( isStaticMember!(C, "gfp"), "!");
> static assert(!isStaticMember!(C, "fpm"), "!");
> static assert(!isStaticMember!(C, "m"), "!");
> static assert(!isStaticMember!(C, "m2"), "!");
> static assert(!isStaticMember!(C, "iom"), "!");
> static assert( isStaticMember!(C, "iosm"), "!");
> static assert(!isStaticMember!(C, "p"), "!");
> static assert( isStaticMember!(C, "sp"), "!");
I would point out that iosm is missing from both the struct and the class,
so it can't be true for isStaticMember. I assume that you meant for it to be
iosf, which _is_ declared?
- Jonathan M Davis
More information about the Digitalmars-d
mailing list