Chris@16
|
1 // Copyright David Abrahams 2004. Distributed under the Boost
|
Chris@16
|
2 // Software License, Version 1.0. (See accompanying
|
Chris@16
|
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
4 #ifndef ENABLE_IF_DWA2004722_HPP
|
Chris@16
|
5 # define ENABLE_IF_DWA2004722_HPP
|
Chris@16
|
6
|
Chris@16
|
7 # include <boost/python/detail/sfinae.hpp>
|
Chris@16
|
8 # include <boost/detail/workaround.hpp>
|
Chris@16
|
9
|
Chris@16
|
10 # if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
|
Chris@16
|
11 # include <boost/mpl/if.hpp>
|
Chris@16
|
12
|
Chris@16
|
13 namespace boost { namespace python { namespace detail {
|
Chris@16
|
14
|
Chris@16
|
15 template <class T> struct always_void { typedef void type; };
|
Chris@16
|
16
|
Chris@16
|
17 template <class C, class T = int>
|
Chris@16
|
18 struct enable_if_arg
|
Chris@16
|
19 {
|
Chris@16
|
20 typedef typename mpl::if_<C,T,int&>::type type;
|
Chris@16
|
21 };
|
Chris@16
|
22
|
Chris@16
|
23 template <class C, class T = int>
|
Chris@16
|
24 struct disable_if_arg
|
Chris@16
|
25 {
|
Chris@16
|
26 typedef typename mpl::if_<C,int&,T>::type type;
|
Chris@16
|
27 };
|
Chris@16
|
28
|
Chris@16
|
29 template <class C, class T = typename always_void<C>::type>
|
Chris@16
|
30 struct enable_if_ret
|
Chris@16
|
31 {
|
Chris@16
|
32 typedef typename mpl::if_<C,T,int[2]>::type type;
|
Chris@16
|
33 };
|
Chris@16
|
34
|
Chris@16
|
35 template <class C, class T = typename always_void<C>::type>
|
Chris@16
|
36 struct disable_if_ret
|
Chris@16
|
37 {
|
Chris@16
|
38 typedef typename mpl::if_<C,int[2],T>::type type;
|
Chris@16
|
39 };
|
Chris@16
|
40
|
Chris@16
|
41 }}} // namespace boost::python::detail
|
Chris@16
|
42
|
Chris@16
|
43 # elif !defined(BOOST_NO_SFINAE)
|
Chris@16
|
44 # include <boost/utility/enable_if.hpp>
|
Chris@16
|
45
|
Chris@16
|
46 namespace boost { namespace python { namespace detail {
|
Chris@16
|
47
|
Chris@16
|
48 template <class C, class T = int>
|
Chris@16
|
49 struct enable_if_arg
|
Chris@16
|
50 : enable_if<C,T>
|
Chris@16
|
51 {};
|
Chris@16
|
52
|
Chris@16
|
53 template <class C, class T = int>
|
Chris@16
|
54 struct disable_if_arg
|
Chris@16
|
55 : disable_if<C,T>
|
Chris@16
|
56 {};
|
Chris@16
|
57
|
Chris@16
|
58 template <class C, class T = void>
|
Chris@16
|
59 struct enable_if_ret
|
Chris@16
|
60 : enable_if<C,T>
|
Chris@16
|
61 {};
|
Chris@16
|
62
|
Chris@16
|
63 template <class C, class T = void>
|
Chris@16
|
64 struct disable_if_ret
|
Chris@16
|
65 : disable_if<C,T>
|
Chris@16
|
66 {};
|
Chris@16
|
67
|
Chris@16
|
68 }}} // namespace boost::python::detail
|
Chris@16
|
69
|
Chris@16
|
70 # endif
|
Chris@16
|
71
|
Chris@16
|
72 #endif // ENABLE_IF_DWA2004722_HPP
|