11 -> std::vector<std::shared_ptr<Derived>>
20 std::vector<std::shared_ptr<Derived>> ret;
25 std::back_inserter(ret),
26 [](
const std::shared_ptr<Base>& ptr) -> std::shared_ptr<Derived> {
27 return std::dynamic_pointer_cast<Derived>(ptr);
30 ret.erase(std::remove(ret.begin(), ret.end(), std::shared_ptr<Derived>{}), ret.end());