On Saturday, 11 August 2012 at 19:06:22 UTC, Chris Cain wrote:
Same idea, but doing it with just one template and using static ifs...

struct S(T) {}

template isS(T) {
    static if(is(T _ : S!U, U))
        enum isS = true;
    else
        enum isS = false;
}

static assert(isS!(S!float));
static assert(!isS!float);

I usually prefer overloading for this particular kind of template because of the restriction that is() expressions may only introduce symbols when used in static-if statements. I think the if(blah) a = true; else a = false; pattern is worth avoiding as it leaves a bad taste in the mouth of many programmers.

Reply via email to