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