При компиляции получаю:
maxtest.cpp: In function `const T& max(const T&, const T&, const T&) [with T = const char*]':
maxtest.cpp:29: instantiated from here
maxtest.cpp:19: warning: returning reference to temporary
Это может быть связано с тем, что вы возвращаете ссылку на временный объект (т. Е. Ваш объект больше не существует к тому времени, когда вызывающая функция может проверить его значение). Это, безусловно, ошибка , но, поскольку вы сказали ошибка , я подозреваю, что это не та ошибка, о которой вы говорили.
Некоторые заголовки в Visual Studio #define min и max. Чтобы обойти это, поставьте круглые скобки вокруг min и max:
return (max) ( (max) (a, b), c );