Код IT Загрузка примера кода…

C++ main.cpp
#include <type_traits>

// Вызывается, только если T — целочисленный тип
template<typename T>
typename std::enable_if<std::is_integral_v<T>, T>::type
abs(T x) {
    return x < 0 ? -x : x;
}

// Вызывается для остальных типов (например, float, double)
template<typename T>
typename std::enable_if<!std::is_integral_v<T>, T>::type
abs(T x) {
    return x < 0 ? -x : x;
}
#include <type_traits>

// Вызывается, только если T — целочисленный тип
template<typename T>
typename std::enable_if<std::is_integral_v<T>, T>::type
abs(T x) {
    return x < 0 ? -x : x;
}

// Вызывается для остальных типов (например, float, double)
template<typename T>
typename std::enable_if<!std::is_integral_v<T>, T>::type
abs(T x) {
    return x < 0 ? -x : x;
}