1 #ifndef CHECKED_CAST_HH
2 #define CHECKED_CAST_HH
10 #include <type_traits>
13 template<
typename TO,
typename FROM>
14 [[nodiscard]]
static TO checked_cast(FROM* from)
16 assert(
dynamic_cast<TO
>(from) ==
static_cast<TO
>(from));
17 return static_cast<TO
>(from);
19 template<
typename TO,
typename FROM>
20 [[nodiscard]]
static TO checked_cast(FROM& from)
22 using TO_PTR = std::remove_reference_t<TO>*;
23 TO_PTR* suppress_warning =
nullptr; (void)suppress_warning;
24 assert(
dynamic_cast<TO_PTR
>(&from) ==
static_cast<TO_PTR
>(&from));
25 return static_cast<TO
>(from);