// 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 #include #include #include template struct has_type { template static boost::mp_true f( boost::mp_identity* ); template static boost::mp_false f( ... ); using type = decltype( f(0) ); static const auto value = type::value; }; using boost::mp_defer; template using add_pointer = T*; template using add_pointer_impl = mp_defer; int main() { BOOST_TEST_TRAIT_TRUE((has_type>)); BOOST_TEST_TRAIT_TRUE((std::is_same::type, void*>)); BOOST_TEST_TRAIT_TRUE((has_type>)); BOOST_TEST_TRAIT_TRUE((std::is_same::type, int*>)); BOOST_TEST_TRAIT_FALSE((has_type>)); BOOST_TEST_TRAIT_FALSE((has_type>)); return boost::report_errors(); }