Skip to content

[core] Inconsistent behavior in TClassEdit::ResolveTypedef() wrt. TDataMember::GetTrueTypeName() #13274

Open
@jalopezg-git

Description

@jalopezg-git

Check duplicate issues.

  • Checked for duplicates

Description

In a non-C++-modules build, TClassEdit::ResolveTypedef() is unable to resolve a typedef that aliases a fundamental data type.

However, given a non-static class member of the same type, TDataMember::GetTrueTypeName(), correctly provides the expected information. This seems to be inconsistent behavior in ROOT meta.

Reproducer

For instance, consider the typedef and struct declarations below.

namespace SG { typedef uint32_t sgkey_t; }

struct PackedParameters {
   SG::sgkey_t  m_sgkey;
};

In this case, the return value of ResolveTypedef() / GetTrueTypeName() is inconsistent as shown below.

root [1] TClassEdit::ResolveTypedef("SG::sgkey_t")
(std::string) "SG::sgkey_t"
root [2] auto klass = TClass::GetClass("PackedParameters");
root [3] auto member = klass->GetDataMember("m_sgkey");
root [4] member->GetFullTypeName()
(const char *) "SG::sgkey_t"
root [5] member->GetTrueTypeName()
(const char *) "unsigned int"

ROOT version

master

Installation method

build from source

Operating system

ArchLinux x86_64

Additional context

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions