30template <
typename TTo,
typename TFrom>
35 || std::is_base_of<TFrom ALIB_COMMA TTo >::value,
36 "TFrom and TTo must be related by inheritance.")
38 if constexpr (std::is_polymorphic<TTo>::value)
return dynamic_cast<TTo*
>(derived);
39 else return static_cast<TTo*
>(derived);
48requires std::default_initializable<T>
49constexpr bool IsNull(
const T& t) {
return t==T{}; }
55requires std::default_initializable<T>
56constexpr bool IsNotNull(
const T& t) {
return t!=T{}; }
63requires std::default_initializable<T>
#define ALIB_WARNINGS_RESTORE
#define ALIB_STATIC_ASSERT(CondVariable, Cond, Message)
#define ALIB_WARNINGS_IGNORE_DOCS
constexpr void SetNull(T &t)
constexpr bool IsNotNull(const T &t)
ALIB_WARNINGS_RESTORE TTo * SafeCast(TFrom *derived)
constexpr bool IsNull(const T &t)
@ Destruct
The main phase of termination that destructs everything.