template class Template {}; struct Foo { void Bar(Template&); }; void Foo::Bar(Template&) {} /* OUTPUT: { "types": [{ "id": 0, "usr": "c:@ST>1#T@Template", "short_name": "Template", "qualified_name": "Template", "definition_spelling": "2:7-2:15", "definition_extent": "2:1-2:18", "uses": ["*2:7-2:15", "5:12-5:20", "*8:15-8:23"] }, { "id": 1, "usr": "c:@S@Foo", "short_name": "Foo", "qualified_name": "Foo", "definition_spelling": "4:8-4:11", "definition_extent": "4:1-6:2", "funcs": [0], "uses": ["*4:8-4:11", "8:6-8:9"] }], "funcs": [{ "id": 0, "usr": "c:@S@Foo@F@Bar#&$@S@Template>#d#", "short_name": "Bar", "qualified_name": "Foo::Bar", "declarations": ["5:8-5:11"], "definition_spelling": "8:11-8:14", "definition_extent": "8:1-8:36", "declaring_type": 1, "uses": ["5:8-5:11", "8:11-8:14"] }] } */