| 85 | */ |
| 86 | template <typename Target, typename Source, typename Deleter> |
| 87 | std::unique_ptr<Target, Deleter> polymorphic_cast_unique_ptr(std::unique_ptr<Source, Deleter> &&v) |
| 88 | { |
| 89 | if (dynamic_cast<Target *>(v.get()) == nullptr) |
| 90 | { |
| 91 | ARM_COMPUTE_THROW(std::bad_cast()); |
| 92 | } |
| 93 | auto r = static_cast<Target *>(v.release()); |
| 94 | return std::unique_ptr<Target, Deleter>(r, std::move(v.get_deleter())); |
| 95 | } |
| 96 | |
| 97 | /** Polymorphic down cast between two unique pointer types |
| 98 | * |