fork(1) download
  1. #include <type_traits>
  2. #include <cstdint>
  3. #include <cstddef>
  4. #include <typeinfo>
  5. #include <iostream>
  6.  
  7. template<typename T>
  8. struct identity {
  9. typedef T type;
  10. };
  11.  
  12. template<typename T, typename Head, typename... Tail>
  13. struct best_type {
  14. typedef typename std::conditional<
  15. sizeof(Head) >= sizeof(T),
  16. identity<Head>,
  17. best_type<T, Tail...>
  18. >::type::type type;
  19. };
  20.  
  21. template<typename T>
  22. struct type_to_integral {
  23. typedef typename best_type<T, uint8_t, uint16_t, uint32_t, uint64_t, uint_least64_t>::type type;
  24.  
  25. static_assert(std::is_integral<type>::value, "Type is too large");
  26. };
  27.  
  28. int main() {
  29. static_assert(std::is_same<type_to_integral<uint8_t>::type, uint8_t>::value, "Fail");
  30. static_assert(std::is_same<type_to_integral<uint16_t>::type, uint16_t>::value, "Fail");
  31. static_assert(std::is_same<type_to_integral<uint32_t>::type, uint32_t>::value, "Fail");
  32. static_assert(std::is_same<type_to_integral<uint64_t>::type, uint64_t>::value, "Fail");
  33. }
  34.  
Success #stdin #stdout 0s 3336KB
stdin
Standard input is empty
stdout
Standard output is empty