template<typename T>
T Max(T a, T b)
{
    return a > b ? a : b;
}


int a = 5, b = 8;
char c = 'c', 'd';
a = Max(c, d); // OK, vytvoří se instance pro typ char
b = Max(a, c); // chyba – nelze odvodit typ parametrů
