summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sphinx/domains/cpp.py16
-rw-r--r--tests/test_cpp_domain.py4
2 files changed, 18 insertions, 2 deletions
diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py
index 99622977..77ec032d 100644
--- a/sphinx/domains/cpp.py
+++ b/sphinx/domains/cpp.py
@@ -303,7 +303,7 @@ class ArrayDefExpr(WrappingDefExpr):
)
-class RefDefExpr(WrappingDefExpr):
+class LValRefDefExpr(WrappingDefExpr):
def get_id(self):
return self.typename.get_id() + u'R'
@@ -312,6 +312,15 @@ class RefDefExpr(WrappingDefExpr):
return u'%s&' % self.typename
+class RValRefDefExpr(WrappingDefExpr):
+
+ def get_id(self):
+ return self.typename.get_id() + u'RR'
+
+ def __unicode__(self):
+ return u'%s&&' % self.typename
+
+
class ConstDefExpr(WrappingDefExpr):
def __init__(self, typename, prefix=False):
@@ -602,7 +611,10 @@ class DefinitionParser(object):
elif self.match(_array_def_re):
expr = ArrayDefExpr(expr, self.last_match.group(1))
elif self.skip_string('&'):
- expr = RefDefExpr(expr)
+ if self.skip_string('&'):
+ expr = RValRefDefExpr(expr)
+ else:
+ expr = LValRefDefExpr(expr)
else:
return expr
diff --git a/tests/test_cpp_domain.py b/tests/test_cpp_domain.py
index 3ca29b4e..eb08c608 100644
--- a/tests/test_cpp_domain.py
+++ b/tests/test_cpp_domain.py
@@ -49,6 +49,10 @@ def test_type_definitions():
assert unicode(parse('type_object', 'long long int foo')) == 'long long foo'
+ x = 'MyClass::MyClass(MyClass::MyClass&&)'
+ assert unicode(parse('function', x)) == x
+
+
def test_operators():
x = parse('function', 'void operator new [ ] ()')
assert unicode(x) == 'void operator new[]()'