Олд скул. Мова C, можна і в плюсах (не рекомендовано):
#define max(a,b) (((a)>(b))?(a):(b))
Проблеми: якщо має повертати значення - обмеження одним виразом, жодного контролю типів, подвійне обчислення аргументів, наприклад, max(a++, b++) збільшить більше число на два.
C++ до C++20:
template<typename T>
T max(T a, T b)
{
if(a>b)
return a;
else
return b;
}
C++20 надає скорочену форму попереднього виразу через auto:
auto max(auto a, auto b)
{
if(a>b)
return a;
else
return b;
}
означає абсолютно те саме, що й попередній код.
Так, а тепер ще раз: чому ви хочете "обійтись без цього auto"?