Summary: std.math.pow should be a template
Currently, pow is an overloaded function, which always takes real as the first
However, real isn't a common variable type, so passing something that can be
implicitly casted to real results in a compiler overload resolution error.
This problem could be solved by implementing pow as a wrapper to the original
function (named e.g. _pow):
real pow(T, U)(T t, U u)
return _pow(cast(real)t, u);
This should take care of cases where you try to pass a double, int, or even
possibly a custom struct that supports an opCast to real.
I'm not sure if casts are needed for the second argument, if they are, special
care should be taken to not cast integral types to real, as the integer
versions are optimized for that.