]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/parameter/test/mpl.cpp
1 // Copyright David Abrahams 2006. Distributed under the Boost
2 // Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #include <boost/mpl/list.hpp>
7 #include <boost/mpl/for_each.hpp>
8 #include <boost/mpl/assert.hpp>
9 #include <boost/mpl/size.hpp>
10 #include <boost/type_traits/add_pointer.hpp>
12 # include <boost/mpl/contains.hpp>
16 namespace mpl
= boost::mpl
;
24 BOOST_MPL_ASSERT((mpl::contains
<Set
,T
>));
29 template<class Expected
, class Params
>
30 void f_impl(Params
const& p
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected
))
32 BOOST_MPL_ASSERT_RELATION(
33 mpl::size
<Expected
>::value
35 , mpl::size
<Params
>::value
38 mpl::for_each
<Params
, boost::add_pointer
<mpl::_1
> >(assert_in_set
<Expected
>());
41 template<class Expected
, class Tester
, class Name
, class Value
, class Index
>
42 void f(Tester
const& t
, const Name
& name_
,
43 const Value
& value_
, const Index
& index_
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected
))
45 f_impl
<Expected
>(f_parameters()(t
, name_
, value_
, index_
));
48 template<class Expected
, class Tester
, class Name
, class Value
>
49 void f(Tester
const& t
, const Name
& name_
, const Value
& value_
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected
))
51 f_impl
<Expected
>(f_parameters()(t
, name_
, value_
));
54 template<class Expected
, class Tester
, class Name
>
55 void f(Tester
const& t
, const Name
& name_
BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(Expected
))
57 f_impl
<Expected
>(f_parameters()(t
, name_
));
62 typedef test::tag::tester tester_
;
63 typedef test::tag::name name_
;
64 typedef test::tag::value value_
;
65 typedef test::tag::index index_
;
67 f
<mpl::list4
<tester_
,name_
,value_
,index_
> >(1, 2, 3, 4);
68 f
<mpl::list3
<tester_
,name_
,index_
> >(1, 2, index
= 3);
69 f
<mpl::list3
<tester_
,name_
,index_
> >(1, index
= 2, name
= 3);
70 f
<mpl::list2
<name_
,value_
> >(name
= 3, value
= 4);
71 f_impl
<mpl::list1
<value_
> >(value
= 4);