在海湾合作委员会中修复"比较总是错误......"的警告

Goz*_*Goz 5 c++ templates gcc-warning

我遇到了一个问题,我确信这个问题很容易解决,但我很茫然......

我有一个执行以下代码的模板:

T value     = d;
if ( std::numeric_limits< T >::is_signed )
{
    if ( value < 0 )
    {
        *this += _T( "-" );
        value = -(signed)value;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,由于明显的原因,GCC正在给我一个警告(由于数据类型的范围有限,比较总是错误的当为无符号类型编译此代码时).我完全理解这背后的原因,我在numeric_limits检查中查看是否可以让编译器关闭它(它适用于MSVC).在海湾合作委员会下,我得到了警告.有没有办法(没有禁用警告,我甚至不知道你是否可以使用GCC)来修复此警告?代码永远不会被调用,我会假设优化器也会编译出来但我无法摆脱警告.

有人可以给我一个解决方案吗?

干杯!

MSa*_*ers 5

更简单的解决方案

template <typename T> inline bool isNegative(T value) {
  return std::numeric_limits< T >::is_signed && value < 0; // Doesn't trigger warning.
}

T value     = d;
if ( isNegative(value) ) // Doesn't trigger warning either.
{
    *this += _T( "-" );
    value = -1 * value;
}
Run Code Online (Sandbox Code Playgroud)