| // Copyright David Abrahams 2004. Distributed under the Boost |
| // Software License, Version 1.0. (See accompanying |
| // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| #ifndef ENABLE_IF_DWA2004722_HPP |
| # define ENABLE_IF_DWA2004722_HPP |
| |
| # include <boost/python/detail/sfinae.hpp> |
| # include <boost/detail/workaround.hpp> |
| |
| # if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) |
| # include <boost/mpl/if.hpp> |
| |
| namespace boost { namespace python { namespace detail { |
| |
| template <class T> struct always_void { typedef void type; }; |
| |
| template <class C, class T = int> |
| struct enable_if_arg |
| { |
| typedef typename mpl::if_<C,T,int&>::type type; |
| }; |
| |
| template <class C, class T = int> |
| struct disable_if_arg |
| { |
| typedef typename mpl::if_<C,int&,T>::type type; |
| }; |
| |
| template <class C, class T = typename always_void<C>::type> |
| struct enable_if_ret |
| { |
| typedef typename mpl::if_<C,T,int[2]>::type type; |
| }; |
| |
| template <class C, class T = typename always_void<C>::type> |
| struct disable_if_ret |
| { |
| typedef typename mpl::if_<C,int[2],T>::type type; |
| }; |
| |
| }}} // namespace boost::python::detail |
| |
| # elif !defined(BOOST_NO_SFINAE) |
| # include <boost/utility/enable_if.hpp> |
| |
| namespace boost { namespace python { namespace detail { |
| |
| template <class C, class T = int> |
| struct enable_if_arg |
| : enable_if<C,T> |
| {}; |
| |
| template <class C, class T = int> |
| struct disable_if_arg |
| : disable_if<C,T> |
| {}; |
| |
| template <class C, class T = void> |
| struct enable_if_ret |
| : enable_if<C,T> |
| {}; |
| |
| template <class C, class T = void> |
| struct disable_if_ret |
| : disable_if<C,T> |
| {}; |
| |
| }}} // namespace boost::python::detail |
| |
| # endif |
| |
| #endif // ENABLE_IF_DWA2004722_HPP |