summaryrefslogtreecommitdiff
path: root/src/third_party/boost-1.70.0/boost/type_traits/detail/mp_defer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/boost-1.70.0/boost/type_traits/detail/mp_defer.hpp')
-rw-r--r--src/third_party/boost-1.70.0/boost/type_traits/detail/mp_defer.hpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/third_party/boost-1.70.0/boost/type_traits/detail/mp_defer.hpp b/src/third_party/boost-1.70.0/boost/type_traits/detail/mp_defer.hpp
new file mode 100644
index 00000000000..f3beeb21bba
--- /dev/null
+++ b/src/third_party/boost-1.70.0/boost/type_traits/detail/mp_defer.hpp
@@ -0,0 +1,56 @@
+#ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
+#define BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED
+
+//
+// Copyright 2015 Peter Dimov
+//
+// 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
+//
+
+#include <boost/type_traits/integral_constant.hpp>
+#include <boost/type_traits/conditional.hpp>
+
+namespace boost
+{
+
+namespace type_traits_detail
+{
+
+// mp_valid
+// implementation by Bruno Dutra (by the name is_evaluable)
+
+template<template<class...> class F, class... T>
+struct mp_valid_impl
+{
+ template<template<class...> class G, class = G<T...>>
+ static boost::true_type check_s(int);
+
+ template<template<class...> class>
+ static boost::false_type check_s(...);
+
+ using type = decltype(check_s<F>(0));
+};
+
+template<template<class...> class F, class... T>
+using mp_valid = typename mp_valid_impl<F, T...>::type;
+
+// mp_defer
+
+struct mp_empty
+{
+};
+
+template<template<class...> class F, class... T> struct mp_defer_impl
+{
+ using type = F<T...>;
+};
+
+template<template<class...> class F, class... T> using mp_defer = typename boost::conditional<mp_valid<F, T...>::value, mp_defer_impl<F, T...>, mp_empty>::type;
+
+} // namespace type_traits_detail
+
+} // namespace boost
+
+#endif // #ifndef BOOST_TYPE_TRAITS_DETAIL_MP_DEFER_HPP_INCLUDED