• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // Copyright Louis Dionne 2013-2017
2  // Distributed under the Boost Software License, Version 1.0.
3  // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4  
5  #include <boost/hana/assert.hpp>
6  #include <boost/hana/equal.hpp>
7  #include <boost/hana/transform.hpp>
8  #include <boost/hana/tuple.hpp>
9  #include <boost/hana/type.hpp>
10  namespace hana = boost::hana;
11  
12  
13  template <typename ...>
14  struct F { struct type; };
15  
16  struct x1;
17  struct x2;
18  struct x3;
19  struct x4;
20  
main()21  int main() {
22      // transform with tuple_t and a metafunction
23      BOOST_HANA_CONSTANT_CHECK(hana::equal(
24          hana::transform(hana::tuple_t<>, hana::metafunction<F>),
25          hana::tuple_t<>
26      ));
27  
28      BOOST_HANA_CONSTANT_CHECK(hana::equal(
29          hana::transform(hana::tuple_t<x1>, hana::metafunction<F>),
30          hana::tuple_t<F<x1>::type>
31      ));
32  
33      BOOST_HANA_CONSTANT_CHECK(hana::equal(
34          hana::transform(hana::tuple_t<x1, x2>, hana::metafunction<F>),
35          hana::tuple_t<F<x1>::type, F<x2>::type>
36      ));
37  
38      BOOST_HANA_CONSTANT_CHECK(hana::equal(
39          hana::transform(hana::tuple_t<x1, x2, x3>, hana::metafunction<F>),
40          hana::tuple_t<F<x1>::type, F<x2>::type, F<x3>::type>
41      ));
42  
43      BOOST_HANA_CONSTANT_CHECK(hana::equal(
44          hana::transform(hana::tuple_t<x1, x2, x3, x4>, hana::metafunction<F>),
45          hana::tuple_t<F<x1>::type, F<x2>::type, F<x3>::type, F<x4>::type>
46      ));
47  
48      BOOST_HANA_CONSTANT_CHECK(hana::equal(
49          hana::transform(hana::tuple_t<x1, x2, x3, x4>, hana::template_<F>),
50          hana::tuple_t<F<x1>, F<x2>, F<x3>, F<x4>>
51      ));
52  }
53