diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-11 15:32:48 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-02-11 15:32:48 +0100 |
commit | fd205fb6f8edc73a0d867a6dfc5a34737bae6bb9 (patch) | |
tree | fa51b5b2a3e7e676a4bb468104e0c60bcdbc73e8 | |
parent | ad0dc41899cafb8ee8afc73856d3a86ec3fa0240 (diff) |
ref<T>: Add cast operator
-rw-r--r-- | src/libstore/store-api.cc | 4 | ||||
-rw-r--r-- | src/libutil/types.hh | 19 |
2 files changed, 8 insertions, 15 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index e205fd0e8..039d07e29 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -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); } diff --git a/src/libutil/types.hh b/src/libutil/types.hh index 23eb52512..0eae46c5f 100644 --- a/src/libutil/types.hh +++ b/src/libutil/types.hh @@ -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); -} - - } |