Je vais avoir un problème dont je suis sûr est simple à corriger, mais je suis à une perte ...de fixation « comparaison est toujours fausse ... » avertissement dans GCC
J'ai un modèle exécute le code suivant:
T value = d;
if (std::numeric_limits<T>::is_signed)
{
if (value < 0)
{
*this += _T("-");
value = -(signed)value;
}
}
maintenant, pour des raisons évidentes, GCC me donne un avertissement (comparaison est toujours fausse en raison de gamme limitée de type de données) lorsque ce code est compilé pour un type non signé. Je comprends parfaitement le raisonnement derrière cela et j'ai mis dans la vérification numeric_limits pour voir si je pourrais obtenir le compilateur pour se taire à ce sujet (cela a fonctionné pour MSVC). Hélas sous GCC, je reçois l'avertissement. Y at-il un moyen (à moins de désactiver l'avertissement que je ne sais même pas si vous pouvez faire avec GCC) pour corriger cet avertissement? Le code ne sera jamais appelé de toute façon et je suppose que l'optimiseur le compilera également, mais je ne peux pas me débarrasser de l'avertissement.
Quelqu'un peut-il me donner une solution à cela?
À la votre!
Ceci est TRÈS méchant quand 'int' est 16 bits. Quand 'value' est long,' value = - (signed/* int * /) value' tronque les plus grandes valeurs. Multipliez par '-1' à la place, et laissez l'optimiseur le comprendre. – MSalters