diff options
| -rw-r--r-- | sphinx/domains/cpp.py | 16 | ||||
| -rw-r--r-- | tests/test_cpp_domain.py | 4 |
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[]()' |
