7#define DC_TRAIT_CLONEABLE(SELF) DC_REQUIRE_METHOD(SELF, SELF, clone, (SELF const*));
9#define DC_COPY_CLONE(SELF) (*(SELF))
11#define _DC_DERIVE_CLONE_MEMBER(MEMBER_TYPE, MEMBER_NAME) \
12 .MEMBER_NAME = NS(MEMBER_TYPE, clone)(&self->MEMBER_NAME),
14#define DC_DERIVE_CLONE(TYPE) \
15 static TYPE NS(TYPE, clone)(TYPE const* self) { \
16 return (TYPE){NS(TYPE, REFLECT)(_DC_DERIVE_CLONE_MEMBER)}; \
19#define _DC_DERIVE_STD_CLONE(TYPE, ...) \
20 static TYPE NS(TYPE, clone)(TYPE const* self) { return *self; }
#define _DC_DERIVE_STD_CLONE(TYPE,...)
#define DC_STD_REFLECT(F,...)