williamr@2: 
williamr@2: #ifndef BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
williamr@2: #define BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED
williamr@2: 
williamr@2: // Copyright Eric Friedman 2002
williamr@2: // Copyright Aleksey Gurtovoy 2004
williamr@2: //
williamr@2: // Distributed under the Boost Software License, Version 1.0. 
williamr@2: // (See accompanying file LICENSE_1_0.txt or copy at 
williamr@2: // http://www.boost.org/LICENSE_1_0.txt)
williamr@2: //
williamr@2: // See http://www.boost.org/libs/mpl for documentation.
williamr@2: 
williamr@2: // $Source: /cvsroot/boost/boost/boost/mpl/aux_/contains_impl.hpp,v $
williamr@2: // $Date: 2004/09/02 15:40:43 $
williamr@2: // $Revision: 1.2 $
williamr@2: 
williamr@2: #include <boost/mpl/contains_fwd.hpp>
williamr@2: #include <boost/mpl/begin_end.hpp>
williamr@2: #include <boost/mpl/find.hpp>
williamr@2: #include <boost/mpl/not.hpp>
williamr@2: #include <boost/mpl/aux_/traits_lambda_spec.hpp>
williamr@2: #include <boost/mpl/aux_/config/forwarding.hpp>
williamr@2: #include <boost/mpl/aux_/config/static_constant.hpp>
williamr@2: 
williamr@2: #include <boost/type_traits/is_same.hpp>
williamr@2: 
williamr@2: namespace boost { namespace mpl {
williamr@2: 
williamr@2: template< typename Tag >
williamr@2: struct contains_impl
williamr@2: {
williamr@2:     template< typename Sequence, typename T > struct apply
williamr@2: #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
williamr@2:         : not_< is_same<
williamr@2:               typename find<Sequence,T>::type
williamr@2:             , typename end<Sequence>::type
williamr@2:             > >
williamr@2:     {
williamr@2: #else
williamr@2:     {
williamr@2:         typedef not_< is_same<
williamr@2:               typename find<Sequence,T>::type
williamr@2:             , typename end<Sequence>::type
williamr@2:             > > type;
williamr@2: 
williamr@2:         BOOST_STATIC_CONSTANT(bool, value = 
williamr@2:               (not_< is_same<
williamr@2:                   typename find<Sequence,T>::type
williamr@2:                 , typename end<Sequence>::type
williamr@2:                 > >::value)
williamr@2:             );
williamr@2: #endif
williamr@2:     };
williamr@2: };
williamr@2: 
williamr@2: BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2,contains_impl)
williamr@2: 
williamr@2: }}
williamr@2: 
williamr@2: #endif // BOOST_MPL_AUX_CONTAINS_IMPL_HPP_INCLUDED