diff --git a/tree/treeplayer/inc/TTreeReaderArray.h b/tree/treeplayer/inc/TTreeReaderArray.h index a799134bad788..9e6c9c21505a2 100644 --- a/tree/treeplayer/inc/TTreeReaderArray.h +++ b/tree/treeplayer/inc/TTreeReaderArray.h @@ -43,6 +43,7 @@ class TTreeReaderArrayBase : public TTreeReaderValueBase { std::size_t GetValueSize() const { return fImpl ? fImpl->GetValueSize(GetProxy()) : 0; } protected: + TTreeReaderArrayBase() = default; void *UntypedAt(std::size_t idx) const { return fImpl->At(GetProxy(), idx); } void CreateProxy() override; bool GetBranchAndLeaf(TBranch *&branch, TLeaf *&myLeaf, TDictionary *&branchActualType, @@ -52,8 +53,8 @@ class TTreeReaderArrayBase : public TTreeReaderValueBase { std::unique_ptr fImpl; // Common interface to collections - // FIXME: re-introduce once we have ClassDefInline! - // ClassDefOverride(TTreeReaderArrayBase, 0);//Accessor to member of an object stored in a collection + ClassDefInlineOverride(TTreeReaderArrayBase, 0);//Accessor to member of an object stored in a collection + friend class ClassDefGenerateInitInstanceLocalInjector; }; class R__CLING_PTRCHECK(off) TTreeReaderUntypedArray final : public TTreeReaderArrayBase { @@ -241,8 +242,7 @@ class R__CLING_PTRCHECK(off) TTreeReaderArray final : public ROOT::Internal::TTr #define R__TTreeReaderArray_TypeString(T) #T const char *GetDerivedTypeName() const override { return R__TTreeReaderArray_TypeString(T); } #undef R__TTreeReaderArray_TypeString - // FIXME: re-introduce once we have ClassDefTInline! - // ClassDefT(TTreeReaderArray, 0);//Accessor to member of an object stored in a collection + ClassDefInlineOverride(TTreeReaderArray, 0);//Accessor to member of an object stored in a collection }; namespace cling { diff --git a/tree/treeplayer/inc/TTreeReaderValue.h b/tree/treeplayer/inc/TTreeReaderValue.h index 316672c771ef0..a4a428c23fc02 100644 --- a/tree/treeplayer/inc/TTreeReaderValue.h +++ b/tree/treeplayer/inc/TTreeReaderValue.h @@ -103,6 +103,7 @@ class TTreeReaderValueBase { virtual ~TTreeReaderValueBase(); protected: + TTreeReaderValueBase() = default; TTreeReaderValueBase(TTreeReader *reader, const char *branchname, TDictionary *dict, bool opaqueRead = false); TTreeReaderValueBase(const TTreeReaderValueBase &); TTreeReaderValueBase &operator=(const TTreeReaderValueBase &); @@ -114,7 +115,7 @@ class TTreeReaderValueBase { virtual void CreateProxy(); static const char *GetBranchDataType(TBranch *branch, TDictionary *&dict, TDictionary const *curDict); - virtual const char *GetDerivedTypeName() const = 0; + virtual const char *GetDerivedTypeName() const { return nullptr; }; Detail::TBranchProxy *GetProxy() const { return fProxy; } @@ -150,9 +151,8 @@ class TTreeReaderValueBase { */ bool fOpaqueRead{false}; - // FIXME: re-introduce once we have ClassDefInline! - // ClassDefOverride(TTreeReaderValueBase, 0);//Base class for accessors to data via TTreeReader - + ClassDefInline(TTreeReaderValueBase, 0);//Base class for accessors to data via TTreeReader + friend class ClassDefGenerateInitInstanceLocalInjector; friend class ::TTreeReader; }; @@ -238,7 +238,7 @@ class R__CLING_PTRCHECK(off) TTreeReaderValue final : public ROOT::Internal::TTr T &operator*() { return *Get(); } protected: - // FIXME: use IsA() instead once we have ClassDefTInline + // FIXME: use IsA() instead /// Get the template argument as a string. const char *GetDerivedTypeName() const override { @@ -246,8 +246,7 @@ class R__CLING_PTRCHECK(off) TTreeReaderValue final : public ROOT::Internal::TTr return sElementTypeName.data(); } - // FIXME: re-introduce once we have ClassDefTInline! - // ClassDefT(TTreeReaderValue, 0);//Accessor to data via TTreeReader + ClassDefInlineOverride(TTreeReaderValue, 0);//Accessor to data via TTreeReader }; namespace cling {