c ++ 11 pugixml fpclassify (), предупреждающий float-разговор от двойного до плавающего, может изменить его значение - PullRequest
0 голосов
/ 06 ноября 2018

Я использую c ++ 11 и использую (или) библиотеку pugixml c ++. Я сам собираю файлы pugi (1 .cpp файл и 2 .hpp файлы).

При использовании gcc в linux (ubuntu) он работает нормально. Когда я строю с другим x-компилятором, я получаю предупреждения (возможно, из-за разной архитектуры / целочисленных размеров) .... пока достаточно справедливо.

Моя проблема в том, что я хочу исправить предупреждения, потому что я использую -Werror во всем коде / make-файле, и у меня включено много предупреждений.

Конкретная строка кода в библиотеке pugixml выглядит следующим образом (это файл ~ 12k строк):

#elif defined(fpclassify) && defined(FP_NAN)
    return fpclassify(value) == FP_NAN
#else

Где значение double. Я получаю ошибку:

преобразование в 'float' из 'double' может изменить его значение [ -Werror = float-преобразование]

Это, кажется, исправляет это: return fpclassify(static_cast<float>(value)) == FP_NAN

Но то, что я не вижу (кроме того, что компилятор говорит мне), это то, что есть fpclassify() и FP_NAN. Я могу видеть некоторую документацию здесь и здесь . Кажется, чтобы показать, что существует версия fpclassify для float и double .... поэтому я не понимаю, почему есть предупреждения ...

Используемый мной x-компилятор: arm-poky-linux-gnueabi-gcc версия 5.2.0. который поддерживает c ++ 11.

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

...