diff options
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.hpp | 56 |
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 |