14template <
typename CType, void (*FreeFunction)(CType) =
nullptr,
24 Handle(
Handle&& rhs) : m_handle(rhs.m_handle) { rhs.m_handle = CInvalid; }
34#pragma GCC diagnostic push
35#pragma GCC diagnostic ignored "-Waddress"
37 if constexpr (FreeFunction !=
nullptr) {
39#pragma GCC diagnostic pop
41 if (m_handle != CInvalid) {
42 FreeFunction(m_handle);
46 m_handle = rhs.m_handle;
47 rhs.m_handle = CInvalid;
58#pragma GCC diagnostic push
59#pragma GCC diagnostic ignored "-Waddress"
61 if constexpr (FreeFunction !=
nullptr) {
63#pragma GCC diagnostic pop
65 if (m_handle != CInvalid) {
66 FreeFunction(m_handle);
71 operator CType()
const {
return m_handle; }
74 CType m_handle = CInvalid;
Handle(const Handle &)=delete
~Handle()
Definition Types.hpp:51
Handle & operator=(const Handle &)=delete
Handle & operator=(Handle &&rhs)
Definition Types.hpp:26
Handle(CType val)
Definition Types.hpp:19
Handle(Handle &&rhs)
Definition Types.hpp:24
#define HAL_kInvalidHandle
Definition Types.h:15
WPILib Hardware Abstraction Layer (HAL) namespace.
Definition Types.hpp:9