fork(1) download
  1. #include <utility>
  2. #include <cstring>
  3. #include <cstdint>
  4.  
  5. #include <iostream>
  6.  
  7. template <typename PatternT>
  8. struct raw_bytes
  9. {
  10. public:
  11. template <
  12. typename ArgT,
  13. typename std::enable_if<sizeof(ArgT) == sizeof(PatternT)>::type* = nullptr
  14. >
  15. raw_bytes(ArgT arg)
  16. {
  17. std::memcpy(&value, &arg, sizeof(PatternT));
  18. }
  19.  
  20. template <
  21. typename ArgT,
  22. size_t N,
  23. typename std::enable_if<N * sizeof(ArgT) == sizeof(PatternT)>::type* = nullptr>
  24. raw_bytes(ArgT const (&arg)[N])
  25. {
  26. std::memcpy(&value, arg, sizeof(PatternT));
  27. }
  28.  
  29. operator PatternT const &() const
  30. {
  31. return value;
  32. }
  33.  
  34. private:
  35. PatternT value;
  36. };
  37.  
  38. void foo(raw_bytes<uint64_t> bytes)
  39. {
  40. std::cout << bytes << std::endl;
  41. }
  42.  
  43.  
  44. int main() {
  45. foo(1.23456e+2);
  46. return 0;
  47. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
4638387860618067575