#pragma once #include #include "scoped.h" #include "typecheck.h" DEF_SCOPED_TYPE(mem, void *, NULL, free) #define MEM_SCOPED(TYPE, VAL) SCOPED(mem, TYPE *, VAL) #define MEM_FREE(TYPE, MEM) ({ CHECK_TYPE(TYPE **, MEM), (TYPE *)_scoped_mem_cleanup((void **)(MEM)); }) #define MEM_RELEASE(TYPE, MEM) ({ CHECK_TYPE(TYPE **, MEM), (TYPE *)_scoped_mem_release((void **)(MEM)); })