Устранение мертвого кода - это оптимизация , а не языковая функция.
В C ++ 17 мы получаем if constexpr
, который делает то, что вы хотите. Поскольку вы пометили C ++ 11, я предполагаю, что вы не можете использовать это, и разумные опции специализируются на вашем шаблоне или отправке тегов.
Явная специализация
template <typename T>
void f(T t) { }
template <>
void f(int t) { g(t); }
Отправка тегов
namespace detail {
template <typename T>
f(T t, std::false_type) { }
template <typename T>
f(T t, std::true_type)
{
g(t);
}
}
template <typename T>
f(T t) { detail::f(t, is_same<T, int>{}); }