Следующий код (уменьшен из более крупного, более разумного образца):
#include <vector>
void shrink(std::vector<int>& v) {
while (v.size() > 0) {
v.resize(v.size() - 1);
}
}
Приводит g cc 7,3 к выдаче этого предупреждения ( godbolt ):
In function 'void shrink(std::vector<int>&)':
cc1plus: warning: 'void* __builtin_memset(void*, int, long unsigned int)':
specified size 18446744073709551612 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
Я почти час смотрел на этот код с коллегой, и он мне кажется правильным; на что ж cc жалуется?