Add utility IsCompileTimeConstant and use it in HybridFunctor
Summary
The type-trait IsIntegralConstant
checks exactly for a type std::integral_constant<T,value>
but does not allow any derived classes or user-defined classes with the same interface. Example of such compile-time constant is std::is_same<S,T>
.
The new utility is directly used to implement HybridFunctor
to allow a wider range of compiler-time input.