diff --git a/include/boost/mp11/utility.hpp b/include/boost/mp11/utility.hpp index 5935e6d..4fd98e1 100644 --- a/include/boost/mp11/utility.hpp +++ b/include/boost/mp11/utility.hpp @@ -10,7 +10,7 @@ #include #include -#include +#include namespace boost { @@ -53,6 +53,28 @@ template using mp_if_c = typename detail::mp_if_c_i template using mp_if = typename detail::mp_if_c_impl(C::value), T, E...>::type; // mp_valid + +#if BOOST_WORKAROUND(BOOST_INTEL, BOOST_TESTED_AT(1800)) + +// contributed by Roland Schulz in https://github.com/boostorg/mp11/issues/17 + +namespace detail +{ + +template using void_t = void; + +template class F, class... T> +struct mp_valid_impl: mp_false {}; + +template class F, class... T> +struct mp_valid_impl>, F, T...>: mp_true {}; + +} // namespace detail + +template class F, class... T> using mp_valid = typename detail::mp_valid_impl; + +#else + // implementation by Bruno Dutra (by the name is_evaluable) namespace detail { @@ -69,6 +91,8 @@ template class F, class... T> struct mp_valid_impl template class F, class... T> using mp_valid = typename detail::mp_valid_impl::type; +#endif + // mp_defer namespace detail {