#include <utility>
#include <cstring>
#include <cstdint>
#include <iostream>
template <typename PatternT>
struct raw_bytes
{
public:
template <
typename ArgT,
typename std::enable_if<sizeof(ArgT) == sizeof(PatternT)>::type* = nullptr
>
raw_bytes(ArgT arg)
{
std::memcpy(&value, &arg, sizeof(PatternT));
}
template <
typename ArgT,
size_t N,
typename std::enable_if<N * sizeof(ArgT) == sizeof(PatternT)>::type* = nullptr>
raw_bytes(ArgT const (&arg)[N])
{
std::memcpy(&value, arg, sizeof(PatternT));
}
operator PatternT const &() const
{
return value;
}
private:
PatternT value;
};
void foo(raw_bytes<uint64_t> bytes)
{
std::cout << bytes << std::endl;
}
int main() {
foo(1.23456e+2);
return 0;
}
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGludD4KCiNpbmNsdWRlIDxpb3N0cmVhbT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBQYXR0ZXJuVD4Kc3RydWN0IHJhd19ieXRlcwp7CnB1YmxpYzoKICAgIHRlbXBsYXRlIDwKICAgIAl0eXBlbmFtZSBBcmdULAogICAgCXR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHNpemVvZihBcmdUKSA9PSBzaXplb2YoUGF0dGVyblQpPjo6dHlwZSogPSBudWxscHRyCiAgICA+CiAgICByYXdfYnl0ZXMoQXJnVCBhcmcpCiAgICB7CiAgICAgICAgc3RkOjptZW1jcHkoJnZhbHVlLCAmYXJnLCBzaXplb2YoUGF0dGVyblQpKTsKICAgIH0KICAgIAogICAgdGVtcGxhdGUgPAogICAgCXR5cGVuYW1lIEFyZ1QsCiAgICAJc2l6ZV90IE4sCiAgICAJdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8TiAqIHNpemVvZihBcmdUKSA9PSBzaXplb2YoUGF0dGVyblQpPjo6dHlwZSogPSBudWxscHRyPgogICAgcmF3X2J5dGVzKEFyZ1QgY29uc3QgKCZhcmcpW05dKQogICAgewogICAgICAgIHN0ZDo6bWVtY3B5KCZ2YWx1ZSwgYXJnLCBzaXplb2YoUGF0dGVyblQpKTsKICAgIH0KICAgIAogICAgb3BlcmF0b3IgUGF0dGVyblQgY29uc3QgJigpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKcHJpdmF0ZToKICAgIFBhdHRlcm5UIHZhbHVlOwp9OwoKdm9pZCBmb28ocmF3X2J5dGVzPHVpbnQ2NF90PiBieXRlcykKewoJc3RkOjpjb3V0IDw8IGJ5dGVzIDw8IHN0ZDo6ZW5kbDsKfQoKCmludCBtYWluKCkgewoJZm9vKDEuMjM0NTZlKzIpOwoJcmV0dXJuIDA7Cn0=