def describe_signature(self, signode: TextElement) -> None:
    addSpace = False
    for attr in self.attrs:
        if addSpace:
            signode += nodes.Text(' ')
        addSpace = True
        attr.describe_signature(signode)

    def _add(signode: TextElement, text: str) -> bool:
        if addSpace:
            signode += nodes.Text(' ')
        signode += addnodes.desc_annotation(text, text)
        return True
    if self.storage:
        addSpace = _add(signode, self.storage)
    if self.threadLocal:
        addSpace = _add(signode, 'thread_local')
    if self.inline:
        addSpace = _add(signode, 'inline')
    if self.friend:
        addSpace = _add(signode, 'friend')
    if self.virtual:
        addSpace = _add(signode, 'virtual')
    if self.explicit:
        addSpace = _add(signode, 'explicit')
    if self.constexpr:
        addSpace = _add(signode, 'constexpr')
    if self.volatile:
        addSpace = _add(signode, 'volatile')
    if self.const:
        addSpace = _add(signode, 'const')
def describe_signature(self, signode: TextElement) -> None:
    addSpace = False
    for attr in self.attrs:
        if addSpace:
            signode += nodes.Text(' ')
        addSpace = True
        attr.describe_signature(signode)

    def _add(signode: TextElement, text: str) -> bool:
        if addSpace:
            signode += nodes.Text(' ')
        signode += addnodes.desc_annotation(text, text)
        return True
    if self.storage:
        addSpace = _add(signode, self.storage)
    if self.threadLocal:
        addSpace = _add(signode, 'thread_local')
    if self.inline:
        addSpace = _add(signode, 'inline')
    if self.friend:
        addSpace = _add(signode, 'friend')
    if self.virtual:
        addSpace = _add(signode, 'virtual')
    if self.explicit:
        addSpace = _add(signode, 'explicit')
    if self.constexpr:
        addSpace = _add(signode, 'constexpr')
    if self.volatile:
        addSpace = _add(signode, 'volatile')
    if self.const:
        addSpace = _add(signode, 'const')