• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 // Copyright 2015, 2017 Peter Dimov.
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 //
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
8 
9 
10 #include <boost/mp11/utility.hpp>
11 #include <boost/mp11/detail/config.hpp>
12 #include <boost/core/lightweight_test_trait.hpp>
13 #include <type_traits>
14 
main()15 int main()
16 {
17     using boost::mp11::mp_identity;
18     using boost::mp11::mp_quote_trait;
19     using boost::mp11::mp_invoke_q;
20 
21     {
22         using Q = mp_quote_trait<mp_identity>;
23 
24         BOOST_TEST_TRAIT_TRUE((std::is_same<Q::fn<void>, void>));
25         BOOST_TEST_TRAIT_TRUE((std::is_same<Q::fn<int[]>, int[]>));
26 
27         BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q, void>, void>));
28         BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q, int[]>, int[]>));
29     }
30 
31     {
32         using Q = mp_quote_trait<std::add_pointer>;
33 
34         BOOST_TEST_TRAIT_TRUE((std::is_same<Q::fn<void>, void*>));
35         BOOST_TEST_TRAIT_TRUE((std::is_same<Q::fn<int[]>, int(*)[]>));
36 
37         BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q, void>, void*>));
38         BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q, int[]>, int(*)[]>));
39     }
40 
41     {
42         using Q = mp_quote_trait<std::add_const>;
43 
44         BOOST_TEST_TRAIT_TRUE((std::is_same<Q::fn<void>, void const>));
45         BOOST_TEST_TRAIT_TRUE((std::is_same<Q::fn<int[]>, int const[]>));
46 
47 #if !BOOST_MP11_WORKAROUND( BOOST_MP11_GCC, < 40900 )
48 
49         // g++ 4.7, 4.8 have difficulties with preserving top-level const
50 
51         BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q, void>, void const>));
52         BOOST_TEST_TRAIT_TRUE((std::is_same<mp_invoke_q<Q, int[]>, int const[]>));
53 
54 #endif
55     }
56 
57     return boost::report_errors();
58 }
59