From 78fca0b734fafe8fe970ac5ef0170635ff7e4f23 Mon Sep 17 00:00:00 2001 From: Danilo Piparo <danilo.piparo@cern.ch> Date: Mon, 3 Dec 2018 14:01:05 +0100 Subject: [PATCH] [DF][ROOT-9785] RResultPtr<Type_t> can hold results of type IsConvertibleToType_t --- tree/dataframe/inc/ROOT/RResultPtr.hxx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tree/dataframe/inc/ROOT/RResultPtr.hxx b/tree/dataframe/inc/ROOT/RResultPtr.hxx index 19d49efbf38..87f69a70c11 100644 --- a/tree/dataframe/inc/ROOT/RResultPtr.hxx +++ b/tree/dataframe/inc/ROOT/RResultPtr.hxx @@ -74,6 +74,9 @@ class RResultPtr { using SPT_t = std::shared_ptr<T>; // friend declarations + template <typename T1> + friend class RResultPtr; + template <typename T1> friend RResultPtr<T1> RDFDetail::MakeResultPtr(const std::shared_ptr<T1> &, ::ROOT::Detail::RDF::RLoopManager &, std::shared_ptr<RDFInternal::RActionBase>); @@ -145,6 +148,15 @@ public: RResultPtr &operator=(const RResultPtr &) = default; RResultPtr &operator=(RResultPtr &&) = default; explicit operator bool() const { return bool(fObjPtr); } + template<typename TO, typename std::enable_if<std::is_convertible<T, TO>::value, int>::type = 0 > + operator RResultPtr<TO>() const + { + RResultPtr<TO> rp; + rp.fLoopManager = fLoopManager; + rp.fObjPtr = fObjPtr; + rp.fActionPtr = fActionPtr; + return rp; + } /// Get a const reference to the encapsulated object. /// Triggers event loop and execution of all actions booked in the associated RLoopManager. -- GitLab