Ваш код имеет неопределенное поведение (UB), даже в случае foo(reinterpret_cast<int &>(baz));
, который, кажется, работает (возможный вывод UB).
Проще было бы удалить приведение и изменить foo
на:
void foo(int bar);
Если вы не можете изменить foo
, тогда используйте промежуточную переменную:
uint16_t baz = 100;
uint16_t qux = 200;
int i = baz;
foo(i);
std::cout << "baz = " << baz << ", qux = " << qux << std::endl;
i = qux;
foo(i);
std::cout << "baz = " << baz << ", qux = " << qux << std::endl;