Remove mp_defer_if_valid; add mp_identity_t.

This commit is contained in:
Peter Dimov
2015-07-26 17:43:00 +03:00
parent bd9e5f9c41
commit e51ed6cf3d
5 changed files with 39 additions and 35 deletions
+14 -3
View File
@@ -19,6 +19,9 @@ template<class T> struct mp_identity
using type = T;
};
// mp_identity_t
template<class T> using mp_identity_t = T;
// mp_inherit
template<class... T> struct mp_inherit: T... {};
@@ -82,13 +85,21 @@ 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;
// mp_defer
template<template<class...> class F, class... T> struct mp_defer
namespace detail
{
template<template<class...> class F, class... T> struct mp_defer_impl
{
using type = F<T...>;
};
// mp_defer_if_valid
template<template<class...> class F, class... T> using mp_defer_if_valid = mp_if<mp_valid<F, T...>, mp_defer<F, T...>, mp_inherit<>>;
struct mp_no_type
{
};
} // namespace detail
template<template<class...> class F, class... T> using mp_defer = mp_if<mp_valid<F, T...>, detail::mp_defer_impl<F, T...>, detail::mp_no_type>;
} // namespace boost