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

У меня есть шаблонная функция, которая работает с переменной типа шаблона, и если значение меньше 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)

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