mirror of
https://github.com/boostorg/mp11.git
synced 2025-12-05 16:19:20 +01:00
Remove mp_defer_if_valid; add mp_identity_t.
This commit is contained in:
@@ -8,19 +8,35 @@
|
||||
|
||||
|
||||
#include <boost/mp11/utility.hpp>
|
||||
#include <boost/mp11/integral.hpp>
|
||||
#include <boost/core/lightweight_test_trait.hpp>
|
||||
#include <type_traits>
|
||||
|
||||
template<class T> using add_pointer = T*;
|
||||
template<class T> struct has_type
|
||||
{
|
||||
template<class U> static boost::mp_true f( boost::mp_identity<typename U::type>* );
|
||||
template<class U> static boost::mp_false f( ... );
|
||||
|
||||
using type = decltype( f<T>(0) );
|
||||
|
||||
static const auto value = type::value;
|
||||
};
|
||||
|
||||
using boost::mp_defer;
|
||||
|
||||
template<class T> using add_pointer_impl = mp_defer<add_pointer, T>;
|
||||
template<class T> using add_pointer = T*;
|
||||
template<class... T> using add_pointer_impl = mp_defer<add_pointer, T...>;
|
||||
|
||||
int main()
|
||||
{
|
||||
BOOST_TEST_TRAIT_TRUE((has_type<add_pointer_impl<void>>));
|
||||
BOOST_TEST_TRAIT_TRUE((std::is_same<add_pointer_impl<void>::type, void*>));
|
||||
|
||||
BOOST_TEST_TRAIT_TRUE((has_type<add_pointer_impl<int>>));
|
||||
BOOST_TEST_TRAIT_TRUE((std::is_same<add_pointer_impl<int>::type, int*>));
|
||||
|
||||
BOOST_TEST_TRAIT_FALSE((has_type<add_pointer_impl<>>));
|
||||
BOOST_TEST_TRAIT_FALSE((has_type<add_pointer_impl<void, void>>));
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user