Templates and generic programming
T.48
Если компилятор не поддерживает концепты, эмулируйте их через `enable_if`
Причина
Потому что это лучшее, что можно сделать без прямой поддержки концептов. enable_if можно использовать для условного определения функций и выбора из набора функций.
Пример
template<typename T>
enable_if_t<is_integral_v<T>>
f(T v)
{
// ...
}
// Эквивалентно:
template<Integral T>
void f(T v)
{
// ...
}
Примечание
Остерегайтесь взаимодополняющих ограничений. Эмуляция перегрузки концептов с помощью enable_if иногда вынуждает нас использовать эту ненадёжную технику проектирования.
Контроль
???