Сравнение всегда ложно из-за ограниченного диапазона ... с шаблонами

У меня есть шаблонная функция, которая работает с переменной типа шаблона, и если значение меньше 0, устанавливает его на 0. Это нормально работает, но когда мой шаблонный тип не подписан, я получаю предупреждение о том, что сравнение всегда ложный. Это, очевидно, имеет смысл, но, поскольку оно является шаблонным, я бы хотел, чтобы оно было общим для всех типов данных (со знаком и без знака) и не выдавало предупреждение.

Я использую g ++ в Linux, и я предполагаю, что есть способ подавить это конкретное предупреждение с помощью параметра командной строки для g ++, но я все же хотел бы получить предупреждение в других, не шаблонных случаях. Мне интересно, есть ли какой-то способ в коде, чтобы предотвратить это, без необходимости писать несколько версий функции?

template < class T >
T trim(T &val)
{
  if (val < 0)
  {
    val = 0;
  }
  return (val);
}
int main()
{
  char cval = 5;
  unsigned char ucval = 5;

  cout << "Untrimmed: " << (int)cval;
  cval = trim(cval);
  cout << " Trimmed: " << (int)cval << endl;

  cout << "Untrimmed: " << (int)ucval;
  cval = trim(ucval);
  cout << " Trimmed: " << (int)ucval << endl;

 return (0);
}

Ответы на вопрос(4)

Ваш ответ на вопрос