// SPDX-License-Identifier: Apache-2.0 // Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel #ifndef SYSTEMKIT_VERIFY_H #define SYSTEMKIT_VERIFY_H #include namespace LibSystem::Verify { /// @author 0xf00sec, and Amlal El Mahrouss /// @brief safe cast operator. template inline R* sys_safe_cast(const T* ptr) { ::_rtl_assert(ptr, "safe cast failed!"); return static_cast(const_cast(ptr)); } template struct is_castable { using return_type = U; constexpr static BOOL value = false; }; template struct is_castable { using return_type = T; constexpr static BOOL value = true; }; /// @author Amlal El Mahrouss /// @brief Safe constexpr cast. template constexpr R* sys_constexpr_cast(T* ptr) { static_assert(is_castable::value, "types cannot be casted."); return static_cast(ptr); } } // namespace LibSystem::Verify #endif