]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mpl/include/boost/mpl/multiset/aux_/count_impl.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / mpl / include / boost / mpl / multiset / aux_ / count_impl.hpp
1
2 #ifndef BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
3 #define BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED
4
5 // Copyright Aleksey Gurtovoy 2003-2004
6 //
7 // Distributed under the Boost Software License, Version 1.0.
8 // (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10 //
11 // See http://www.boost.org/libs/mpl for documentation.
12
13 // $Id$
14 // $Date$
15 // $Revision$
16
17 #include <boost/mpl/multiset/aux_/tag.hpp>
18 #include <boost/mpl/count_fwd.hpp>
19 #include <boost/mpl/int.hpp>
20 #include <boost/mpl/aux_/type_wrapper.hpp>
21 #include <boost/mpl/aux_/static_cast.hpp>
22 #include <boost/mpl/aux_/config/static_constant.hpp>
23 #include <boost/mpl/aux_/config/workaround.hpp>
24 #include <boost/mpl/aux_/config/msvc.hpp>
25
26 #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
27 # include <boost/mpl/if.hpp>
28 # include <boost/type_traits/is_reference.hpp>
29 #endif
30
31 namespace boost { namespace mpl {
32
33 #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
34
35 namespace aux {
36 template< typename S, typename U >
37 struct multiset_count_impl
38 : int_< sizeof(S::key_count(BOOST_MPL_AUX_STATIC_CAST(U*,0))) - 1 >
39 {
40 };
41
42 template< typename S, typename U >
43 struct multiset_count_ref_impl
44 {
45 typedef U (* u_)();
46 typedef int_< sizeof(S::ref_key_count(BOOST_MPL_AUX_STATIC_CAST(u_,0))) - 1 > type_;
47 BOOST_STATIC_CONSTANT(int, value = type_::value);
48 typedef type_ type;
49 };
50 }
51
52 template<>
53 struct count_impl< aux::multiset_tag >
54 {
55 template< typename Set, typename Key > struct apply
56 : if_<
57 is_reference<Key>
58 , aux::multiset_count_ref_impl<Set,Key>
59 , aux::multiset_count_impl<Set,Key>
60 >::type
61 {
62 };
63 };
64
65 #else
66
67 template<>
68 struct count_impl< aux::multiset_tag >
69 {
70 template< typename Set, typename Key > struct apply
71 {
72 enum { msvc71_wknd_ = sizeof(Set::key_count(BOOST_MPL_AUX_STATIC_CAST(aux::type_wrapper<Key>*,0))) - 1 };
73 typedef int_< msvc71_wknd_ > type;
74 BOOST_STATIC_CONSTANT(int, value = msvc71_wknd_);
75 };
76 };
77
78 #endif // BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
79
80 }}
81
82 #endif // BOOST_MPL_MULTISET_AUX_COUNT_IMPL_HPP_INCLUDED