virtual inheritance trick to allow enable_shared_from_this with multiple inheritance