class Foo { void operator()(int) { } void operator()(bool); int operator()(int a, int b); }; friend Foo &operator += (const Foo&, const Type&); /* OUTPUT: { "types": [{ "id": 0, "usr": "c:@S@Foo", "short_name": "Foo", "detailed_name": "Foo", "definition_spelling": "1:7-1:10", "definition_extent": "1:1-5:2", "funcs": [0, 1, 2], "uses": ["1:7-1:10", "7:8-7:11", "7:32-7:35"] }], "funcs": [{ "id": 0, "is_operator": true, "usr": "c:@S@Foo@F@operator()#I#", "short_name": "operator()", "detailed_name": "void Foo::operator()(int)", "definition_spelling": "2:8-2:18", "definition_extent": "2:3-2:27", "declaring_type": 0 }, { "id": 1, "is_operator": true, "usr": "c:@S@Foo@F@operator()#b#", "short_name": "operator()", "detailed_name": "void Foo::operator()(bool)", "declarations": [{ "spelling": "3:8-3:18", "extent": "3:3-3:24", "content": "void operator()(bool)", "param_spellings": ["3:23-3:23"] }], "declaring_type": 0 }, { "id": 2, "is_operator": true, "usr": "c:@S@Foo@F@operator()#I#I#", "short_name": "operator()", "detailed_name": "int Foo::operator()(int, int)", "declarations": [{ "spelling": "4:7-4:17", "extent": "4:3-4:31", "content": "int operator()(int a, int b)", "param_spellings": ["4:22-4:23", "4:29-4:30"] }], "declaring_type": 0 }, { "id": 3, "is_operator": true, "usr": "c:@F@operator+=#&1$@S@Foo#&1I#", "short_name": "operator+=", "detailed_name": "Foo &operator+=(const Foo &, const int &)", "declarations": [{ "spelling": "7:13-7:24", "extent": "7:1-7:50", "content": "friend Foo &operator += (const Foo&, const Type&)", "param_spellings": ["7:36-7:36", "7:49-7:49"] }] }] } */