diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 46f775e44..a2298b7bc 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -3011,10 +3011,9 @@ class DefinitionParser(object): self.fail('Expected ")" after "..." in ' 'parameters_and_qualifiers.') break - if paramMode == 'function': - arg = self._parse_type_with_init(outer=None, named='single') - else: - arg = self._parse_type(named=False) + # note: it seems that function arguments can always sbe named, + # even in function pointers and similar. + arg = self._parse_type_with_init(outer=None, named='single') # TODO: parse default parameters # TODO: didn't we just do that? args.append(ASTFunctinoParameter(arg)) diff --git a/tests/test_domain_cpp.py b/tests/test_domain_cpp.py index f33e88128..778ac1c55 100644 --- a/tests/test_domain_cpp.py +++ b/tests/test_domain_cpp.py @@ -132,6 +132,11 @@ def test_type_definitions(): check('type', 'A = B', None, '1A') + # from breathe#267 (named function parameters for function pointers + check('type', 'void (*gpio_callback_t)(struct device *port, uint32_t pin)', + 'gpio_callback_t', '15gpio_callback_t') + check('type', 'void (*f)(std::function g)', 'f', '1f') + def test_member_definitions(): check('member', ' const std::string & name = 42',