diff --git a/tree/ntuple/src/RFieldMeta.cxx b/tree/ntuple/src/RFieldMeta.cxx index 9f4cf06be45e5..1f040c588162a 100644 --- a/tree/ntuple/src/RFieldMeta.cxx +++ b/tree/ntuple/src/RFieldMeta.cxx @@ -1547,7 +1547,8 @@ ROOT::RStreamerField::RStreamerField(std::string_view fieldName, TClass *classp) std::unique_ptr ROOT::RStreamerField::CloneImpl(std::string_view newName) const { - return std::unique_ptr(new RStreamerField(newName, GetTypeName())); + // To get the correct TClass instance in the clone, we clone using the un-normalized type name + return std::unique_ptr(new RStreamerField(newName, fClass->GetName())); } std::size_t ROOT::RStreamerField::AppendImpl(const void *from) diff --git a/tree/ntuple/test/rfield_class.cxx b/tree/ntuple/test/rfield_class.cxx index 594010de1b2c0..a492f53d4694d 100644 --- a/tree/ntuple/test/rfield_class.cxx +++ b/tree/ntuple/test/rfield_class.cxx @@ -411,6 +411,10 @@ TEST(RNTuple, TClassMetaName) ROOT::RStreamerField f6("f", "EdmWrapper"); EXPECT_STREQ("EdmWrapper", f6.GetClass()->GetName()); EXPECT_EQ("EdmWrapper", f6.GetTypeAlias()); + auto clone = f6.Clone("f"); + auto streamerFieldPtr = static_cast(clone.get()); + EXPECT_STREQ("EdmWrapper", streamerFieldPtr->GetClass()->GetName()); + EXPECT_EQ("EdmWrapper", streamerFieldPtr->GetTypeAlias()); } TEST(RNTuple, StreamerInfoRecords)