Также предупреждайте о других случаях, когда сравнение упрощенный. Например: x + 1 > 1 упрощается до x > 0.
Показанный ниже MWE выдает следующее предупреждение на уровне 3 и выше, но не ниже, И, если для оптимизации установлено значение -O2 и выше, но не ниже. Это демонстрируется в версиях g++ 9.3.0 и 10.2.
$ g++ -O3 -Wall -Wextra -pedantic -std=c++17 -Wstrict-overflow= 3 a.cpp
a.cpp: В функции 'void std::push_heap(_RAIter, _RAIter) [с _RAIter = long unsigned int*]':
a.cpp:8:1: предупреждение: предполагается, что при изменении X +- C1 cmp C2 на X cmp C2 --+ C1 [-Wstrict-overflow]
Демонстрация в реальном времени
MWE
Код: Выделить всё
#include
int main() {
std::size_t v[] = {0,10,3};
std::make_heap(std::begin(v),std::end(v));
std::pop_heap(std::begin(v),std::end(v));
std::push_heap(std::begin(v),std::end(v)); //
Подробнее здесь: [url]https://stackoverflow.com/questions/63405519/why-does-stdpush-heap-generate-a-wstrict-overflow-3-warning-even-if-no-signed[/url]