1 
2 #ifndef BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
3 #define BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
4 
5 // Copyright Eric Friedman 2002
6 // Copyright Aleksey Gurtovoy 2004
7 //
8 // Distributed under the Boost Software License, Version 1.0.
9 // (See accompanying file LICENSE_1_0.txt or copy at
10 // http://www.boost.org/LICENSE_1_0.txt)
11 //
12 // See http://www.boost.org/libs/mpl for documentation.
13 
14 // $Id$
15 // $Date$
16 // $Revision$
17 
18 #include <boost/mpl/contains_fwd.hpp>
19 #include <boost/mpl/begin_end.hpp>
20 #include <boost/mpl/find.hpp>
21 #include <boost/mpl/not.hpp>
22 #include <boost/mpl/aux_/traits_lambda_spec.hpp>
23 #include <boost/mpl/aux_/config/forwarding.hpp>
24 #include <boost/mpl/aux_/config/static_constant.hpp>
25 
26 #include <boost/type_traits/is_same.hpp>
27 
28 namespace boost { namespace mpl {
29 
30 template< typename Tag >
31 struct contains_impl
32 {
33     template< typename Sequence, typename T > struct apply
34 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
35         : not_< is_same<
36               typename find<Sequence,T>::type
37             , typename end<Sequence>::type
38             > >
39     {
40 #else
41     {
42         typedef not_< is_same<
43               typename find<Sequence,T>::type
44             , typename end<Sequence>::type
45             > > type;
46 
47         BOOST_STATIC_CONSTANT(bool, value =
48               (not_< is_same<
49                   typename find<Sequence,T>::type
50                 , typename end<Sequence>::type
51                 > >::value)
52             );
53 #endif
54     };
55 };
56 
57 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl)
58 
59 }}
60 
61 #endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
62