I have a structure template that takes two types (T
and S
), and at some point uses a static_cast
to convert from one type to the other. It is often the case that T
and S
are the same type.
A simplified example of the setup:
template <typename T, typename S = T>
struct foo
{
void bar(T val)
{
/* ... */
some_other_function(static_cast<S>(val));
/* ... */
}
};
In the case that S
is the same class as T
, does or can the static_cast
introduce extra overhead, or is it a null operation which will always be ignored?
If it does introduce overhead, is there a simple template metaprogramming trick to perform the static_cast
only if needed, or will I need to create a partial specialization to cope with the T == S
case? I'd rather avoid the partial specialization of the entire foo
template if possible.