summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sphinx/domains/cpp.py10
-rw-r--r--tests/test_cpp_domain.py9
2 files changed, 15 insertions, 4 deletions
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py
index 31daa1f6..edbc091e 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -672,8 +672,9 @@ class DefinitionParser(object):
except ValueError:
return False
- def _parse_builtin(self, modifier):
- path = [modifier]
+ def _parse_builtin(self, modifiers):
+ modifier = modifiers[-1]
+ path = modifiers
following = self._modifiers[modifier]
while 1:
self.skip_ws()
@@ -730,9 +731,10 @@ class DefinitionParser(object):
# impossible for a template to follow, so what
# we do is go to a different function that just
# eats types
- if following is not None:
- return self._parse_builtin(modifier)
modifiers.append(modifier)
+ if following is not None:
+ return self._parse_builtin(modifiers)
+ self.skip_ws()
else:
self.backout()
break
diff --git a/tests/test_cpp_domain.py b/tests/test_cpp_domain.py
index bd8aafa7..64a52aa9 100644
--- a/tests/test_cpp_domain.py
+++ b/tests/test_cpp_domain.py
@@ -43,6 +43,15 @@ def test_type_definitions():
x = 'int printf(const char* fmt, ...)'
assert unicode(parse('function', x)) == x
+ x = 'int foo(const unsigned int j)'
+ assert unicode(parse('function', x)) == x
+
+ x = 'int foo(const unsigned int const j)'
+ assert unicode(parse('function', x)) == x
+
+ x = 'int foo(const int* const ptr)'
+ assert unicode(parse('function', x)) == x
+
x = 'std::vector<std::pair<std::string, long long>> module::blah'
assert unicode(parse('type_object', x)) == x