#include using namespace std; /// Включение функции при помощи возвращаемого типа template typename enable_if::value, Type>::type forInteger(Type var) { return var; } /// Включение функции при помощи дополнительного неиспользуемого параметра template Type forFloat(Type var, typename enable_if::value >::type* = 0) { return var; } /// Включение функции при помощи дополнительного параметра шаблона template::value>::type> Type forDouble(Type var) { // обратите внимание, сигнатура функции не меняется return var; } int main() { int var = 0; // Каждая фукцния для своего типа forInteger((int) var); forDouble ((double) var); forFloat ((float) var); // При использовании // forInteger((float) var); // Произойдет ошибка компиляции // error: no matching function for call to ‘forInteger(float)’ return 0; }