Index: third_party/boost/boost/utility/enable_if.hpp |
diff --git a/third_party/boost/boost/utility/enable_if.hpp b/third_party/boost/boost/utility/enable_if.hpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e076e7b80c2d767398575355ab1e521de04dd90f |
--- /dev/null |
+++ b/third_party/boost/boost/utility/enable_if.hpp |
@@ -0,0 +1,119 @@ |
+// Boost enable_if library |
+ |
+// Copyright 2003 © 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 |