meta_pend.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "simple/support/meta/pend.hpp"
  2. #include "simple/support/meta/list.hpp"
  3. #include <type_traits>
  4. using namespace simple::support;
  5. void Append()
  6. {
  7. static_assert( std::is_same_v<
  8. meta::append_t<meta::list<char, short>, int, long>,
  9. meta::list<char, short, int, long>>);
  10. static_assert( std::is_same_v<
  11. meta::append_t<meta::list<>, int, long>,
  12. meta::list<int, long>>);
  13. static_assert( std::is_same_v<
  14. meta::append_t<meta::list<char, short>, meta::list<>>,
  15. meta::list<char, short, meta::list<>>>);
  16. static_assert( std::is_same_v<
  17. meta::append_t<meta::list<>>,
  18. meta::list<>>);
  19. }
  20. void Prepend()
  21. {
  22. static_assert( std::is_same_v<
  23. meta::prepend_t<meta::list<char, short>, int, long>,
  24. meta::list<int, long, char, short>>);
  25. static_assert( std::is_same_v<
  26. meta::prepend_t<meta::list<>, int, long>,
  27. meta::list<int, long>>);
  28. static_assert( std::is_same_v<
  29. meta::prepend_t<meta::list<char, short>, meta::list<>>,
  30. meta::list<meta::list<>, char, short>>);
  31. static_assert( std::is_same_v<
  32. meta::prepend_t<meta::list<>>,
  33. meta::list<>>);
  34. }
  35. void Concat()
  36. {
  37. static_assert( std::is_same_v<
  38. meta::append_t<meta::list<char, short>, meta::list<int, long>>,
  39. meta::list<char, short, meta::list<int, long>>>);
  40. static_assert( std::is_same_v<
  41. meta::concat_t<meta::list<char, short>, meta::list<int, long>>,
  42. meta::list<char, short, int, long>>);
  43. static_assert( std::is_same_v<
  44. meta::concat_t<meta::list<>, meta::list<int, long>>,
  45. meta::list<int, long>>);
  46. static_assert( std::is_same_v<
  47. meta::concat_t<meta::list<char, short>, meta::list<>>,
  48. meta::list<char, short>>);
  49. static_assert( std::is_same_v<
  50. meta::concat_t<meta::list<>, meta::list<>>,
  51. meta::list<>>);
  52. }
  53. template <typename... T> class otherlist {};
  54. void Convert()
  55. {
  56. static_assert( std::is_same_v<
  57. meta::concat_t<otherlist<>, meta::list<char, short, int, long, long long>>,
  58. otherlist<char, short, int, long, long long>>);
  59. }
  60. int main()
  61. {
  62. Append();
  63. Prepend();
  64. Concat();
  65. Convert();
  66. return 0;
  67. }