On Saturday, 11 August 2018 at 05:17:51 UTC, Cecil Ward wrote:
T myfunc(T)( T x, uint mask )
   if ( mask == 3 )
   {
   return fast_func( x, mask );
   }

but of course this doesn't work because mask is not known at compile-time. so I wondered if there is a way to do something like static if ( isKnownAtCompileTime( mask ) ) but that would not necessarily help me and probably isn't the right way.

You can create an overload where `mask` is passed as a template parameter:

T myfunc(uint mask, T)(T x)
{
    static if(mask == 3) {
        return fast_func(x, mask);
    } else {
        return func(x, mask);
    }
}

The same technique is used by `std.format.format` in the standard library to pass a format string that's known at compile time.

Reply via email to