class Root {}; class MiddleA : public Root {}; class MiddleB : public Root {}; class Derived : public MiddleA, public MiddleB {}; /* OUTPUT: { "types": [{ "id": 0, "usr": "c:@S@Root", "short_name": "Root", "qualified_name": "Root", "definition": "1:1:7", "derived": [1, 2], "uses": ["*1:1:7", "*1:2:24", "*1:3:24"] }, { "id": 1, "usr": "c:@S@MiddleA", "short_name": "MiddleA", "qualified_name": "MiddleA", "definition": "1:2:7", "parents": [0], "derived": [3], "uses": ["*1:2:7", "*1:4:24"] }, { "id": 2, "usr": "c:@S@MiddleB", "short_name": "MiddleB", "qualified_name": "MiddleB", "definition": "1:3:7", "parents": [0], "derived": [3], "uses": ["*1:3:7", "*1:4:40"] }, { "id": 3, "usr": "c:@S@Derived", "short_name": "Derived", "qualified_name": "Derived", "definition": "1:4:7", "parents": [1, 2], "uses": ["*1:4:7"] }] } */