]> git.tdb.fi Git - libs/game.git/blobdiff - source/game/owned.h
Cosmetic fixes
[libs/game.git] / source / game / owned.h
index 620c6aab54e2114a7e3c718256fb794a92593d47..7159c7d9622a06fd83301b7565dc1d55c0beedcc 100644 (file)
@@ -21,6 +21,10 @@ public:
        Owned(Handle<P>, Args &&...);
 
        template<typename P, typename... Args>
+       Owned(Owned<P> &p, Args &&... a): Owned(static_cast<Handle<P> &>(p), std::forward<Args>(a)...) { }
+
+       template<typename P, typename... Args>
+               requires(!std::is_const_v<P>)
        Owned(P &parent, Args &&... args): Owned(Handle<P>::from_object(&parent), std::forward<Args>(args)...) { }
 
        Owned(Owned &&other): Handle<T>(other) { other.ptr = nullptr; }
@@ -43,7 +47,7 @@ Owned<T>::Owned(Handle<P> parent, Args &&... args)
                throw std::invalid_argument("Owned::Owned");
 
        Stage &stage = get_stage(*parent);
-       Pool<T> &pool = stage.get_pools().template get_pool<T>();
+       Pool<T> &pool = stage.get_pools().get_pool<T>();
        this->ptr = pool.create(parent, std::forward<Args>(args)...);
        if constexpr(std::is_base_of_v<Component, T>)
        {
@@ -98,7 +102,7 @@ void Owned<T>::destroy()
                parent->remove_child(*this);
        }
 
-       Pool<T> &pool = stage.get_pools().template get_pool<T>();
+       Pool<T> &pool = stage.get_pools().get_pool<T>();
        pool.destroy(this->ptr);
 }