У меня есть шаблон структуры, который принимает два типа (T и S), и в какой-то момент использует static_cast для преобразования из одного типа в другой. Часто бывает, что T и S являются одним и тем же типом.
Упрощенный пример настройки:
template <typename T, typename S = T>
struct foo
{
void bar(T val)
{
/* ... */
some_other_function(static_cast<S>(val));
/* ... */
}
};
В случае, когда S является тем же классом, что и T, имеет или может static_cast вводить дополнительные служебные данные, или это нулевая операция, которая всегда будет игнорироваться?
Если он вводит накладные расходы, есть ли простой трюк метапрограммирования шаблона, чтобы выполнить static_cast только при необходимости, или мне нужно создать частичную специализацию, чтобы справиться с тегом T == S? Я предпочел бы избежать частичной специализации всего шаблона foo, если это возможно.