meta_flatten.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "simple/support/meta/flatten.hpp"
  2. #include "simple/support/meta/list.hpp"
  3. #include <type_traits>
  4. using namespace simple::support;
  5. int main()
  6. {
  7. static_assert(std::is_same_v<
  8. meta::flatten_once_t<meta::list<>>,
  9. meta::list<>
  10. >);
  11. static_assert(std::is_same_v<
  12. meta::flatten_once_t<meta::list<int, int>>,
  13. meta::list<int, int>
  14. >);
  15. static_assert(std::is_same_v<
  16. meta::flatten_once_t<meta::list<int, meta::list<bool, char>, int>>,
  17. meta::list<int, bool, char, int>
  18. >);
  19. // only one level, no recursion
  20. static_assert(std::is_same_v<
  21. meta::flatten_once_t<meta::list<
  22. int,
  23. meta::list
  24. <
  25. bool,
  26. meta::list
  27. <
  28. long,
  29. short
  30. >,
  31. char
  32. >,
  33. int
  34. >>,
  35. meta::list
  36. <
  37. int,
  38. bool,
  39. meta::list
  40. <
  41. long,
  42. short
  43. >,
  44. char,
  45. int
  46. >
  47. >);
  48. // complete with recursion
  49. static_assert(std::is_same_v<
  50. meta::flatten_t<meta::list<
  51. int,
  52. meta::list
  53. <
  54. bool,
  55. meta::list
  56. <
  57. long,
  58. short
  59. >,
  60. char
  61. >,
  62. int
  63. >>,
  64. meta::list
  65. <
  66. int,
  67. bool,
  68. long,
  69. short,
  70. char,
  71. int
  72. >
  73. >);
  74. return 0;
  75. }