#include <boost/static_assert.hpp>
template <typename To, typename From>
inline To bitwise_cast(From const & from) {
BOOST_STATIC_ASSERT(sizeof(To) == sizeof(From));
union { To to; From from; } u;
u.from = from;
return u.to;
}
#include <iostream>
#include <limits>
int main() {
std::cout << bitwise_cast<int>(123.456f) << std::endl;
std::cout << bitwise_cast<int>(0.0f) << std::endl;
std::cout << bitwise_cast<int>(1.0f) << std::endl;
std::cout << bitwise_cast<int>(std::numeric_limits<float>::infinity()) << std::endl;
std::cout << bitwise_cast<int>(std::numeric_limits<float>::quiet_NaN()) << std::endl;
}