boost/python/detail/enable_if.hpp
// 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