Imported Upstream version 0.8~alpha1
[platform/upstream/syncevolution.git] / src / boost / mpl / aux_ / push_front_impl.hpp
1
2 #ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
3 #define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
4
5 // Copyright Aleksey Gurtovoy 2000-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 // $Source: /cvsroot/boost/boost/boost/mpl/aux_/push_front_impl.hpp,v $
14 // $Date: 2004/09/02 15:40:44 $
15 // $Revision: 1.4 $
16
17 #include <boost/mpl/push_front_fwd.hpp>
18 #include <boost/mpl/aux_/has_type.hpp>
19 #include <boost/mpl/aux_/traits_lambda_spec.hpp>
20 #include <boost/mpl/aux_/config/forwarding.hpp>
21 #include <boost/mpl/aux_/config/static_constant.hpp>
22
23 namespace boost { namespace mpl {
24
25 // agurt 05/feb/04: no default implementation; the stub definition is needed 
26 // to enable the default 'has_push_front' implementation below
27
28 template< typename Tag >
29 struct push_front_impl
30 {
31     template< typename Sequence, typename T > struct apply {};
32 };
33
34 template< typename Tag >
35 struct has_push_front_impl
36 {
37     template< typename Seq > struct apply
38 #if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
39         : aux::has_type< push_front<Seq,int> >
40     {
41 #else
42     {
43         typedef aux::has_type< push_front<Seq,int> > type;
44         BOOST_STATIC_CONSTANT(bool, value = 
45               (aux::has_type< push_front<Seq,int> >::value)
46             );
47 #endif
48     };
49 };
50
51 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl)
52 BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl)
53
54 }}
55
56 #endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED