04.03.2012 3:42, Andrej Mitrovic пишет:
[...code...]
I want to avoid writing "check()" twice. I only have to statically
check a field of a member if it's of a certain type (Foo).

One solution would be to use a boolean:
void test(T)(T t)
{
     bool isTrue = true;
     static if (is(T == Foo))
         isTrue = t.isTrue;

     if (isTrue)
         check();
}

But that kind of defeats the purpose of static if (avoiding runtime
overhead). Does anyone have a trick up their sleeve for these types of
situations? :)


Alias maybe?

void test(T)( T t ) {

enum TRUE = true;

static if( is(T == Foo) ) {
alias t.isTrue isTrue;
} else {
alias TRUE isTrue;
}

if( isTrue ) {
check();
}

}

This will still insert a redundant check for one of instantiations, but compiler should be able to deal with 'if(true)' checks.

Reply via email to