1 | // Copyright Daniel Wallin, David Abrahams 2010. |
2 | // Distributed under the Boost Software License, Version 1.0. |
3 | // (See accompanying file LICENSE_1_0.txt or copy at |
4 | // http://www.boost.org/LICENSE_1_0.txt) |
5 | |
6 | #ifndef BOOST_PARAMETER_IS_MAYBE_050329_HPP |
7 | #define BOOST_PARAMETER_IS_MAYBE_050329_HPP |
8 | |
9 | namespace boost { namespace parameter { namespace aux { |
10 | |
11 | struct maybe_base |
12 | { |
13 | }; |
14 | }}} // namespace boost::parameter::aux |
15 | |
16 | #if defined(BOOST_PARAMETER_CAN_USE_MP11) |
17 | #include <type_traits> |
18 | |
19 | namespace boost { namespace parameter { namespace aux { |
20 | |
21 | template <typename T> |
22 | using is_maybe = ::std::is_base_of< |
23 | ::boost::parameter::aux::maybe_base |
24 | , typename ::std::remove_const<T>::type |
25 | >; |
26 | }}} // namespace boost::parameter::aux |
27 | |
28 | #else // !defined(BOOST_PARAMETER_CAN_USE_MP11) |
29 | #include <boost/mpl/bool.hpp> |
30 | #include <boost/mpl/if.hpp> |
31 | #include <boost/type_traits/is_base_of.hpp> |
32 | #include <boost/type_traits/remove_const.hpp> |
33 | |
34 | namespace boost { namespace parameter { namespace aux { |
35 | |
36 | template <typename T> |
37 | struct is_maybe |
38 | : ::boost::mpl::if_< |
39 | ::boost::is_base_of< |
40 | ::boost::parameter::aux::maybe_base |
41 | , typename ::boost::remove_const<T>::type |
42 | > |
43 | , ::boost::mpl::true_ |
44 | , ::boost::mpl::false_ |
45 | >::type |
46 | { |
47 | }; |
48 | }}} // namespace boost::parameter::aux |
49 | |
50 | #endif // BOOST_PARAMETER_CAN_USE_MP11 |
51 | #endif // include guard |
52 | |
53 | |