inline static constexpr SizeT getIdxOf() { SSVU_ASSERT_STATIC_NM(has<T>()); return Impl::IdxOf<T, Ts...>{}; }
/// @brief Returns a `const TBase*` casted to `const T*`. Asserts that `T` is derived from `TBase`. template<typename T, typename TBase> inline const T* castUp(const TBase* mBase) noexcept { SSVU_ASSERT_STATIC_NM(isSameOrBaseOf<TBase, T>()); return static_cast<const T*>(mBase); }
inline constexpr decltype(auto) mv(T&& mX) noexcept { SSVU_ASSERT_STATIC_NM(!isConst<RmRef<T>>()); return std::move(mX); }
/// @brief Returns a `TBase&` casted to `T&`. Asserts that `T` is derived from `TBase`. template<typename T, typename TBase> inline T& castUp(TBase& mBase) noexcept { SSVU_ASSERT_STATIC_NM(isSameOrBaseOf<TBase, T>()); return static_cast<T&>(mBase); }