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: contains_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ 15 // $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $ 16 // $Revision: 49267 $ 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