11#define GUANAQO_TE_REQUIRED_METHOD(vtable, type, member) \
14 requires { &type::member; }, \
15 "Missing required method '" #type "::" #member "'"); \
17 ::guanaqo::type_erased_wrapped<type, &type::member>(); \
20#define GUANAQO_TE_OPTIONAL_METHOD(vtable, type, member, instance) \
22 if constexpr (requires { &type::member; }) { \
23 using vtable_t = ::std::remove_cvref_t<decltype(vtable)>; \
24 auto assign_vtable = [&] { \
26 ::guanaqo::type_erased_wrapped<type, &type::member, \
27 const vtable_t &>(); \
29 if constexpr (requires { &type::provides_##member; }) { \
30 if (::std::invoke(&type::provides_##member, instance)) \
Flexible type erasure utilities.