]> git.lyx.org Git - lyx.git/blob - boost/boost/mpl/apply_if.hpp
f2ab41aaeeca35d8ec38ab58b8b2a559ce3e0b59
[lyx.git] / boost / boost / mpl / apply_if.hpp
1 //-----------------------------------------------------------------------------
2 // boost/mpl/apply_if.hpp header file
3 // See http://www.boost.org for updates, documentation, and revision history.
4 //-----------------------------------------------------------------------------
5 //
6 // Copyright (c) 2000-02
7 // Aleksey Gurtovoy
8 //
9 // Permission to use, copy, modify, distribute and sell this software
10 // and its documentation for any purpose is hereby granted without fee, 
11 // provided that the above copyright notice appears in all copies and 
12 // that both the copyright notice and this permission notice appear in 
13 // supporting documentation. No representations are made about the 
14 // suitability of this software for any purpose. It is provided "as is" 
15 // without express or implied warranty.
16
17 #ifndef BOOST_MPL_APPLY_IF_HPP_INCLUDED
18 #define BOOST_MPL_APPLY_IF_HPP_INCLUDED
19
20 #include "boost/mpl/if.hpp"
21 #include "boost/mpl/aux_/apply.hpp"
22 #include "boost/mpl/aux_/void_spec.hpp"
23 #include "boost/mpl/aux_/lambda_support.hpp"
24
25 namespace boost {
26 namespace mpl {
27
28 template<
29       typename BOOST_MPL_AUX_VOID_SPEC_PARAM(C)
30     , typename BOOST_MPL_AUX_VOID_SPEC_PARAM(F1)
31     , typename BOOST_MPL_AUX_VOID_SPEC_PARAM(F2)
32     >
33 struct apply_if
34 {
35  private:
36     typedef typename if_<C,F1,F2>::type nullary_func_;
37
38  public:
39     typedef typename BOOST_MPL_AUX_APPLY0(nullary_func_)::type type;
40     BOOST_MPL_AUX_LAMBDA_SUPPORT(3,apply_if,(C,F1,F2))
41 };
42
43 // (almost) copy & paste in order to save one more 
44 // recursively nested template instantiation to user
45 template<
46       bool C
47     , typename F1
48     , typename F2
49     >
50 struct apply_if_c
51 {
52  private:
53     typedef typename if_c<C,F1,F2>::type nullary_func_;
54
55  public:
56     typedef typename BOOST_MPL_AUX_APPLY0(nullary_func_)::type type;
57 };
58
59 BOOST_MPL_AUX_VOID_SPEC(3, apply_if)
60  
61 } // namespace mpl
62 } // namespace boost
63
64 #endif // BOOST_MPL_APPLY_IF_HPP_INCLUDED