Скорее всего, это происходит потому, что reinterpret_cast не предназначен для приведения одного целого типа в другой: он предназначен для трактовки региона памяти как нового объекта, то есть, для приведения целого в ссылку другого типа, целого в указатель или наоброт, или смены типа указателя.
А здесь не происходит ни приведение указателя к целому, ни наоборот.
Скажем, код со ссылкой будет работать:
int foo = -42;
unsigned int& boo = reinterpret_cast<unsigned int&>(foo); // boo = 0xffffffd6
А для приведения целого в целое есть static_cast.