___apply
#define ___last(...) ___apply(___last, ___narg(__VA_ARGS__))(__VA_ARGS__)
#define ___nolast(...) ___apply(___nolast, ___narg(__VA_ARGS__))(__VA_ARGS__)
#define ___arrow(...) ___apply(___arrow, ___narg(__VA_ARGS__))(__VA_ARGS__)
___apply(___rd_p, ___narg(__VA_ARGS__))(fn, src, __VA_ARGS__)
___apply(___core_read, ___empty(__VA_ARGS__))(fn, fn_ptr, dst, \