diff options
Diffstat (limited to 'boost/mp11/utility.hpp')
-rw-r--r-- | boost/mp11/utility.hpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/boost/mp11/utility.hpp b/boost/mp11/utility.hpp index 5935e6da79..4fd98e1c12 100644 --- a/boost/mp11/utility.hpp +++ b/boost/mp11/utility.hpp @@ -10,7 +10,7 @@ #include <boost/mp11/integral.hpp> #include <boost/config.hpp> -#include <boost/detail/workaround.hpp> +#include <boost/config/workaround.hpp> namespace boost { @@ -53,6 +53,28 @@ template<bool C, class T, class... E> using mp_if_c = typename detail::mp_if_c_i template<class C, class T, class... E> using mp_if = typename detail::mp_if_c_impl<static_cast<bool>(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<class...> using void_t = void; + +template<class, template<class...> class F, class... T> +struct mp_valid_impl: mp_false {}; + +template<template<class...> class F, class... T> +struct mp_valid_impl<void_t<F<T...>>, F, T...>: mp_true {}; + +} // namespace detail + +template<template<class...> class F, class... T> using mp_valid = typename detail::mp_valid_impl<void, F, T...>; + +#else + // implementation by Bruno Dutra (by the name is_evaluable) namespace detail { @@ -69,6 +91,8 @@ template<template<class...> class F, class... T> struct mp_valid_impl template<template<class...> class F, class... T> using mp_valid = typename detail::mp_valid_impl<F, T...>::type; +#endif + // mp_defer namespace detail { |