3#include <xrpl/beast/utility/instrumentation.h>
13template <
class Src,
class Dest>
17 :
sizeof(Dest) >=
sizeof(Src));
19template <
class Dest,
class Src>
27 sizeof(Dest) >=
sizeof(Src) + kNotSame,
28 "Destination is too small to hold all values of source");
29 return static_cast<Dest
>(s);
32template <
class Dest,
class Src>
39template <
class Dest,
class Src>
50template <
class Dest,
class Src>
56 "Only unsafe if casting signed to unsigned or "
57 "destination is too small");
58 return static_cast<Dest
>(s);
61template <
class Dest,
class Src>
68template <
class Dest,
class Src>
75template <
class Dest,
class Src>
81 return static_cast<Dest
>(s);
83 auto* result =
dynamic_cast<Dest
>(s);
84 XRPL_ASSERT(result !=
nullptr,
"xrpl::safeDowncast : pointer downcast is valid");
89template <
class Dest,
class Src>
97 "xrpl::safeDowncast : reference downcast is valid");
99 return static_cast<Dest
>(s);
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Dest safeDowncast(Src *s) noexcept
constexpr std::enable_if_t< std::is_integral_v< Dest > &&std::is_integral_v< Src >, Dest > safeCast(Src s) noexcept
constexpr std::enable_if_t< std::is_integral_v< Dest > &&std::is_integral_v< Src >, Dest > unsafeCast(Src s) noexcept