#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;
}