21inline namespace cpp20 {
36template <
typename Target,
typename Source>
39 assert(
dynamic_cast<Target
>(x) == x);
40 return static_cast<Target
>(x);
56template <
typename Target,
typename Source>
59 static_assert(std::is_reference<Target>::value);
64 typename std::add_pointer<
65 typename std::remove_reference<Target>::type
66 >::type>(std::addressof(x))
67 == std::addressof(x));
68 return static_cast<Target
>(x);
Target polymorphic_downcast(Source *const x)
Check the validity of a downcast.
Encapsulate solution for Exercise 2-2.