12#include <boost/static_assert.hpp>
13#include <boost/type_traits/add_pointer.hpp>
14#include <boost/type_traits/is_reference.hpp>
15#include <boost/type_traits/remove_reference.hpp>
54template <
typename Target,
typename Source>
57 assert(
dynamic_cast<Target
>(x) == x);
58 return static_cast<Target
>(x);
74template <
typename Target,
typename Source>
82 typename boost::add_pointer<
83 typename boost::remove_reference<Target>::type
86 return static_cast<Target
>(x);
BOOST_STATIC_ASSERT((boost::is_same< t5, expected_t5 >::value))
Target polymorphic_downcast(Source *const x)
Check the validity of a downcast.
Encapsulate solution for Exercise 2-2.