diff options
Diffstat (limited to 'ext/boost/utility/enable_if.hpp')
-rw-r--r-- | ext/boost/utility/enable_if.hpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/ext/boost/utility/enable_if.hpp b/ext/boost/utility/enable_if.hpp new file mode 100644 index 0000000000..d292c6a7b0 --- /dev/null +++ b/ext/boost/utility/enable_if.hpp @@ -0,0 +1,119 @@ +// Boost enable_if library + +// Copyright 2003 (c) The Trustees of Indiana University. + +// Use, modification, and distribution is subject to 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) + +// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu) +// Jeremiah Willcock (jewillco at osl.iu.edu) +// Andrew Lumsdaine (lums at osl.iu.edu) + + +#ifndef BOOST_UTILITY_ENABLE_IF_HPP +#define BOOST_UTILITY_ENABLE_IF_HPP + +#include "boost/config.hpp" + +// Even the definition of enable_if causes problems on some compilers, +// so it's macroed out for all compilers that do not support SFINAE + +#ifndef BOOST_NO_SFINAE + +namespace boost +{ + + template <bool B, class T = void> + struct enable_if_c { + typedef T type; + }; + + template <class T> + struct enable_if_c<false, T> {}; + + template <class Cond, class T = void> + struct enable_if : public enable_if_c<Cond::value, T> {}; + + template <bool B, class T> + struct lazy_enable_if_c { + typedef typename T::type type; + }; + + template <class T> + struct lazy_enable_if_c<false, T> {}; + + template <class Cond, class T> + struct lazy_enable_if : public lazy_enable_if_c<Cond::value, T> {}; + + + template <bool B, class T = void> + struct disable_if_c { + typedef T type; + }; + + template <class T> + struct disable_if_c<true, T> {}; + + template <class Cond, class T = void> + struct disable_if : public disable_if_c<Cond::value, T> {}; + + template <bool B, class T> + struct lazy_disable_if_c { + typedef typename T::type type; + }; + + template <class T> + struct lazy_disable_if_c<true, T> {}; + + template <class Cond, class T> + struct lazy_disable_if : public lazy_disable_if_c<Cond::value, T> {}; + +} // namespace boost + +#else + +namespace boost { + + namespace detail { typedef void enable_if_default_T; } + + template <typename T> + struct enable_if_does_not_work_on_this_compiler; + + template <bool B, class T = detail::enable_if_default_T> + struct enable_if_c : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <bool B, class T = detail::enable_if_default_T> + struct disable_if_c : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <bool B, class T = detail::enable_if_default_T> + struct lazy_enable_if_c : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <bool B, class T = detail::enable_if_default_T> + struct lazy_disable_if_c : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <class Cond, class T = detail::enable_if_default_T> + struct enable_if : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <class Cond, class T = detail::enable_if_default_T> + struct disable_if : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <class Cond, class T = detail::enable_if_default_T> + struct lazy_enable_if : enable_if_does_not_work_on_this_compiler<T> + { }; + + template <class Cond, class T = detail::enable_if_default_T> + struct lazy_disable_if : enable_if_does_not_work_on_this_compiler<T> + { }; + +} // namespace boost + +#endif // BOOST_NO_SFINAE + +#endif |