| 108 | */ |
| 109 | template <typename Target, typename Source, typename Deleter> |
| 110 | std::unique_ptr<Target, Deleter> polymorphic_downcast_unique_ptr(std::unique_ptr<Source, Deleter> &&v) |
| 111 | { |
| 112 | ARM_COMPUTE_ERROR_ON(dynamic_cast<Target *>(v.get()) != static_cast<Target *>(v.get())); |
| 113 | auto r = static_cast<Target *>(v.release()); |
| 114 | return std::unique_ptr<Target, Deleter>(r, std::move(v.get_deleter())); |
| 115 | } |
| 116 | } // namespace cast |
| 117 | } // namespace utils |
| 118 | } // namespace arm_compute |