diff --git a/tree/ntuple/src/RFieldUtils.cxx b/tree/ntuple/src/RFieldUtils.cxx index 797284973bd76..b4d6e65f1ba6f 100644 --- a/tree/ntuple/src/RFieldUtils.cxx +++ b/tree/ntuple/src/RFieldUtils.cxx @@ -272,6 +272,14 @@ void MapIntegerType(std::string &typeName) typeName = ROOT::RField::TypeName(); } else if (typeName == "unsigned long long" || typeName == "unsigned long long int") { typeName = ROOT::RField::TypeName(); + } else { + // The following two types are 64-bit integers on Windows that we can encounter during renormalization of + // demangled std::type_info names. + if (typeName == "__int64") { + typeName = "std::int64_t"; + } else if (typeName == "unsigned __int64") { + typeName = "std::uint64_t"; + } } } diff --git a/tree/ntuple/test/ntuple_type_name.cxx b/tree/ntuple/test/ntuple_type_name.cxx index 94dcd5450000f..cbbecb70b347f 100644 --- a/tree/ntuple/test/ntuple_type_name.cxx +++ b/tree/ntuple/test/ntuple_type_name.cxx @@ -86,6 +86,8 @@ TEST(RNTuple, TypeNameNormalizationById) EXPECT_EQ("std::int32_t", GetRenormalizedTypeName(typeid(signed))); EXPECT_EQ("std::int32_t", GetRenormalizedTypeName(typeid(std::int32_t))); + EXPECT_EQ("std::int64_t", GetRenormalizedTypeName(typeid(std::int64_t))); + EXPECT_EQ("std::uint64_t", GetRenormalizedTypeName(typeid(std::uint64_t))); EXPECT_EQ("double", GetRenormalizedTypeName(typeid(Double32_t))); EXPECT_EQ("float", GetRenormalizedTypeName(typeid(const float)));