Use more MAKE_ME_EQUALITY_COMPARABLE macros. Make watchable_t::apply_read purely virtual.