Проблема здесь в том, что -Wconversion
будет только предупреждать, если значение, возвращаемое обратно к типу источника, может не совпадать с типом.Например, если вместо foo
будет взято int
, то -Wconversion
выдаст предупреждение, поскольку возможно, что вы не можете привести значение в int
к исходному значению uint64_t
.Если у нас есть
uint64_t u = some_value;
int64_t s = static_cast<int64_t>(u);
uint64_t check = static_cast<uint64_t>(s)
, то check == u
всегда будет истинным (если int64_t
также является комплиментом для двоих), поэтому -Wconversion
не выдаст предупреждение, потому что мы вернем исходное значение.
В этом случае вам понадобится
-Wsign-conversion
, который предупредит вас о несоответствии знаков.