diff --git a/tree/ntuple/src/RFieldMeta.cxx b/tree/ntuple/src/RFieldMeta.cxx index 5f64332ed0e27..621ce474be38b 100644 --- a/tree/ntuple/src/RFieldMeta.cxx +++ b/tree/ntuple/src/RFieldMeta.cxx @@ -1352,7 +1352,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 8385231ee11a5..9e5a9aec38b20 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)