Guest User

Untitled

a guest
Sep 25th, 2018
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4.  
  5. namespace
  6. {
  7. struct basic_traits {};
  8.  
  9. template<
  10. typename Traits,
  11. typename T
  12. > class core
  13. {
  14. public:
  15. using traits_type = Traits;
  16. using value_type = T;
  17. };
  18.  
  19. template< typename T > using basic = core< basic_traits, T >;
  20.  
  21. template<
  22. template< typename > class Traits
  23. > class wrapper
  24. {
  25. public:
  26. template< typename O > using traits_type = Traits< O >;
  27. };
  28. }
  29.  
  30.  
  31. namespace test
  32. {
  33. template<
  34. typename Traits,
  35. typename T,
  36. typename Scale
  37. > class unit
  38. {
  39. public:
  40. using traits_type = Traits;
  41. using value_type = T;
  42. using scale_type = Scale;
  43. };
  44.  
  45. template<
  46. template< typename > class Numer_Unit,
  47. template< typename > class Denom_Unit,
  48. typename T
  49. > class per
  50. {
  51. public:
  52. template< typename O > using numer_unit = Numer_Unit< O >;
  53. template< typename O > using denom_unit = Denom_Unit< O >;
  54. using value_type = T;
  55. };
  56.  
  57. struct unit_scale {};
  58.  
  59. struct foot_traits;
  60. struct meter_traits;
  61.  
  62. template< typename T > using feet = unit< foot_traits, T, unit_scale >;
  63. template< typename T > using meters = unit< meter_traits, T, unit_scale >;
  64.  
  65. struct foot_traits {};
  66. struct meter_traits {};
  67. }
  68.  
  69.  
  70. int main( int, char*[] )
  71. {
  72. using test_fpm = test::per< test::feet, test::meters, double >;
  73.  
  74. std::cout
  75. << std::boolalpha
  76. << std::is_same<
  77. core< basic_traits, int >,
  78. wrapper< basic >::traits_type< int >
  79. >::value
  80. << std::endl
  81. << std::is_same<
  82. test_fpm,
  83. test::per<
  84. test_fpm::numer_unit,
  85. test_fpm::denom_unit,
  86. test_fpm::value_type
  87. >
  88. >::value
  89. << std::endl
  90. ;
  91.  
  92. return 0;
  93. }
Add Comment
Please, Sign In to add comment