#ifndef CUTES_DROP_H #define CUTES_DROP_H #include "typeclass_helpers.h" typedef struct { void (*const drop)(void* self); } IDrop; typedef struct { void* data; IDrop const* tc; } Drop; #define impl_Drop_for(T, drop_f)\ Drop T##_as_Drop(T* x) {\ TC_FN_TYPECHECK(void, drop_f, T*);\ static IDrop const tc = {\ .drop = (void(*const)(void*)) drop_f,\ };\ return (Drop){.tc = &tc, .data = x};\ } extern void default_drop(void*); #define impl_default_Drop_for(T)\ Drop T##_as_Drop(T* x) {\ static IDrop const tc = {\ .drop = default_drop,\ };\ return (Drop){.tc = &tc, .data = x};\ } #endif // !CUTES_DROP_H