fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. template <typename DestinationType, typename SourceType>
  5. DestinationType* pod_cast(SourceType* p)
  6. {
  7. static_assert(std::is_fundamental<DestinationType>::value, "");
  8. static_assert(std::is_fundamental<SourceType>::value, "");
  9. return new (p) DestinationType;
  10. }
  11.  
  12. int main()
  13. {
  14. char c;
  15. char p[42];
  16. auto d = pod_cast<double>(p);
  17. char c2;
  18. double test = 13.37;
  19. *d = 67895762394.2352345;
  20. std::cout << *d << '\n';
  21. std::cout << (void*)&c << '\n';
  22. std::cout << (void*)p << '\n';
  23. std::cout << (void*)d << '\n';
  24. std::cout << (void*)&c2 << '\n';
  25. std::cout << (void*)&test << '\n';
  26. std::cout << "char: " << alignof(char) << '\n';
  27. std::cout << "short: " << alignof(short) << '\n';
  28. std::cout << "double: " << alignof(double) << '\n';
  29. }
Success #stdin #stdout 0s 2828KB
stdin
Standard input is empty
stdout
6.78958e+10
0xbff9287f
0xbff92846
0xbff92846
0xbff9287e
0xbff92870
char: 1
short: 2
double: 8