ref<T>: Add cast operator

This commit is contained in:
Eelco Dolstra 2016-02-11 15:32:48 +01:00
parent ad0dc41899
commit fd205fb6f8
2 changed files with 8 additions and 15 deletions

View file

@ -322,8 +322,8 @@ ref<Store> openStore(bool reserveSpace)
}
return mode == mDaemon
? make_ref<Store, RemoteStore>()
: make_ref<Store, LocalStore>(reserveSpace);
? (ref<Store>) make_ref<RemoteStore>()
: (ref<Store>) make_ref<LocalStore>(reserveSpace);
}

View file

@ -134,16 +134,18 @@ public:
return p;
}
template<typename T2>
operator ref<T2> ()
{
return ref<T2>((std::shared_ptr<T2>) p);
}
private:
template<typename T2, typename... Args>
friend ref<T2>
make_ref(Args&&... args);
template<typename T2, typename T3, typename... Args>
friend ref<T2>
make_ref(Args&&... args);
};
template<typename T, typename... Args>
@ -154,13 +156,4 @@ make_ref(Args&&... args)
return ref<T>(p);
}
template<typename T, typename T2, typename... Args>
inline ref<T>
make_ref(Args&&... args)
{
auto p = std::make_shared<T2>(std::forward<Args>(args)...);
return ref<T>(p);
}
}