Introduce some workarounds for MSVC:
- Need to expand variadic macros explicitly
- Adjacent parameter packs in function templates not supported; use nested
structs instead
- Can't use default parameters in template definition if not present in
declaration
Some improvements to the kernel dispatch:
- Run is now a static member function (don't need to call Get)
- DIM is not treated differently from the other parameters
These are limits in DofQuadLimits and DeviceDofQuadLimits, used for
interpolation, differentiation, and determinant calculations in
QuadratureInterpolator.
In kernel code, DeviceDofQuadLimits will give the relevant limits depending on
whether execution is on CUDA/HIP GPU or CPU.
In host code, DeviceDofQuadLimits::Get() will return the limits according to the
backend configuration of the Device object