Challenge
Manu via Digitalmars-d
digitalmars-d at puremagic.com
Mon Oct 3 06:19:19 PDT 2016
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"), "!");
More information about the Digitalmars-d
mailing list