30template <
typename TTo,
typename TFrom>
34 || std::is_base_of<TFrom ALIB_COMMA TTo >::value,
35 "TFrom and TTo must be related by inheritance.")
37 if constexpr (std::is_polymorphic<TTo>::value)
return dynamic_cast<TTo*
>(derived);
38 else return static_cast<TTo*
>(derived);
47requires std::default_initializable<T>
48constexpr bool IsNull(
const T& t) {
return t==T{}; }
54requires std::default_initializable<T>
55constexpr bool IsNotNull(
const T& t) {
return t!=T{}; }
62requires 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.