"""
This type stub file was generated by pyright.
"""

from typing import Any, TYPE_CHECKING, TypeVar
from docutils import nodes
from docutils.parsers.rst import directives
from sphinx.directives import ObjectDescription
from sphinx.domains import Domain
from sphinx.roles import SphinxRole, XRefRole
from sphinx.transforms import SphinxTransform
from sphinx.util.cfamily import ASTAttributeList, ASTBaseBase, ASTBaseParenExprList, BaseParser
from sphinx.util.docfields import Field
from sphinx.util.docutils import SphinxDirective
from collections.abc import Generator, Iterator
from docutils.nodes import Element, Node, TextElement, system_message
from sphinx.addnodes import desc_signature, pending_xref
from sphinx.application import Sphinx
from sphinx.builders import Builder
from sphinx.environment import BuildEnvironment
from sphinx.util.typing import OptionSpec

"""The C++ language domain."""
if TYPE_CHECKING:
    ...
logger = ...
T = TypeVar('T')
udl_identifier_re = ...
_string_re = ...
_visibility_re = ...
_operator_re = ...
_fold_operator_re = ...
_keywords = ...
_simple_type_specifiers_re = ...
_max_id = ...
_id_prefix = ...
_id_fundamental_v1 = ...
_id_shorthands_v1 = ...
_id_operator_v1 = ...
_id_fundamental_v2 = ...
_id_operator_v2 = ...
_id_operator_unary_v2 = ...
_id_char_from_prefix: dict[str | None, str] = ...
_expression_bin_ops = ...
_expression_unary_ops = ...
_expression_assignment_ops = ...
_id_explicit_cast = ...
class _DuplicateSymbolError(Exception):
    def __init__(self, symbol: Symbol, declaration: ASTDeclaration) -> None:
        ...
    
    def __str__(self) -> str:
        ...
    


class ASTBase(ASTBaseBase):
    ...


class ASTIdentifier(ASTBase):
    def __init__(self, identifier: str) -> None:
        ...
    
    def is_anon(self) -> bool:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def __str__(self) -> str:
        ...
    
    def get_display_string(self) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, prefix: str, templateArgs: str, symbol: Symbol) -> None:
        ...
    


class ASTNestedNameElement(ASTBase):
    def __init__(self, identOrOp: ASTIdentifier | ASTOperator, templateArgs: ASTTemplateArgs) -> None:
        ...
    
    def is_operator(self) -> bool:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, prefix: str, symbol: Symbol) -> None:
        ...
    


class ASTNestedName(ASTBase):
    def __init__(self, names: list[ASTNestedNameElement], templates: list[bool], rooted: bool) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    def num_templates(self) -> int:
        ...
    
    def get_id(self, version: int, modifiers: str = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTExpression(ASTBase):
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTLiteral(ASTExpression):
    ...


class ASTPointerLiteral(ASTLiteral):
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTBooleanLiteral(ASTLiteral):
    def __init__(self, value: bool) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTNumberLiteral(ASTLiteral):
    def __init__(self, data: str) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTStringLiteral(ASTLiteral):
    def __init__(self, data: str) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTCharLiteral(ASTLiteral):
    def __init__(self, prefix: str, data: str) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTUserDefinedLiteral(ASTLiteral):
    def __init__(self, literal: ASTLiteral, ident: ASTIdentifier) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTThisLiteral(ASTExpression):
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTFoldExpr(ASTExpression):
    def __init__(self, leftExpr: ASTExpression, op: str, rightExpr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTParenExpr(ASTExpression):
    def __init__(self, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTIdExpression(ASTExpression):
    def __init__(self, name: ASTNestedName) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixOp(ASTBase):
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixArray(ASTPostfixOp):
    def __init__(self, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixMember(ASTPostfixOp):
    def __init__(self, name: ASTNestedName) -> None:
        ...
    
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixMemberOfPointer(ASTPostfixOp):
    def __init__(self, name: ASTNestedName) -> None:
        ...
    
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixInc(ASTPostfixOp):
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixDec(ASTPostfixOp):
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixCallExpr(ASTPostfixOp):
    def __init__(self, lst: ASTParenExprList | ASTBracedInitList) -> None:
        ...
    
    def get_id(self, idPrefix: str, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPostfixExpr(ASTExpression):
    def __init__(self, prefix: ASTType, postFixes: list[ASTPostfixOp]) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTExplicitCast(ASTExpression):
    def __init__(self, cast: str, typ: ASTType, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTypeId(ASTExpression):
    def __init__(self, typeOrExpr: ASTType | ASTExpression, isType: bool) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTUnaryOpExpr(ASTExpression):
    def __init__(self, op: str, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTSizeofParamPack(ASTExpression):
    def __init__(self, identifier: ASTIdentifier) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTSizeofType(ASTExpression):
    def __init__(self, typ: ASTType) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTSizeofExpr(ASTExpression):
    def __init__(self, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTAlignofExpr(ASTExpression):
    def __init__(self, typ: ASTType) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTNoexceptExpr(ASTExpression):
    def __init__(self, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTNewExpr(ASTExpression):
    def __init__(self, rooted: bool, isNewTypeId: bool, typ: ASTType, initList: ASTParenExprList | ASTBracedInitList) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeleteExpr(ASTExpression):
    def __init__(self, rooted: bool, array: bool, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTCastExpr(ASTExpression):
    def __init__(self, typ: ASTType, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTBinOpExpr(ASTExpression):
    def __init__(self, exprs: list[ASTExpression], ops: list[str]) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTConditionalExpr(ASTExpression):
    def __init__(self, ifExpr: ASTExpression, thenExpr: ASTExpression, elseExpr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTBracedInitList(ASTBase):
    def __init__(self, exprs: list[ASTExpression | ASTBracedInitList], trailingComma: bool) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTAssignmentExpr(ASTExpression):
    def __init__(self, leftExpr: ASTExpression, op: str, rightExpr: ASTExpression | ASTBracedInitList) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTCommaExpr(ASTExpression):
    def __init__(self, exprs: list[ASTExpression]) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTFallbackExpr(ASTExpression):
    def __init__(self, expr: str) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTOperator(ASTBase):
    def is_anon(self) -> bool:
        ...
    
    def is_operator(self) -> bool:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, prefix: str, templateArgs: str, symbol: Symbol) -> None:
        ...
    


class ASTOperatorBuildIn(ASTOperator):
    def __init__(self, op: str) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    


class ASTOperatorLiteral(ASTOperator):
    def __init__(self, identifier: ASTIdentifier) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    


class ASTOperatorType(ASTOperator):
    def __init__(self, type: ASTType) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def get_name_no_template(self) -> str:
        ...
    


class ASTTemplateArgConstant(ASTBase):
    def __init__(self, value: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateArgs(ASTBase):
    def __init__(self, args: list[ASTType | ASTTemplateArgConstant], packExpansion: bool) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTrailingTypeSpec(ASTBase):
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTrailingTypeSpecFundamental(ASTTrailingTypeSpec):
    def __init__(self, names: list[str], canonNames: list[str]) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTrailingTypeSpecDecltypeAuto(ASTTrailingTypeSpec):
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTrailingTypeSpecDecltype(ASTTrailingTypeSpec):
    def __init__(self, expr: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTrailingTypeSpecName(ASTTrailingTypeSpec):
    def __init__(self, prefix: str, nestedName: ASTNestedName, placeholderType: str | None) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTFunctionParameter(ASTBase):
    def __init__(self, arg: ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInit, ellipsis: bool = ...) -> None:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTNoexceptSpec(ASTBase):
    def __init__(self, expr: ASTExpression | None) -> None:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTParametersQualifiers(ASTBase):
    def __init__(self, args: list[ASTFunctionParameter], volatile: bool, const: bool, refQual: str | None, exceptionSpec: ASTNoexceptSpec, trailingReturn: ASTType, override: bool, final: bool, attrs: ASTAttributeList, initializer: str | None) -> None:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTExplicitSpec(ASTBase):
    def __init__(self, expr: ASTExpression | None) -> None:
        ...
    
    def describe_signature(self, signode: TextElement, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclSpecsSimple(ASTBase):
    def __init__(self, storage: str, threadLocal: bool, inline: bool, virtual: bool, explicitSpec: ASTExplicitSpec | None, consteval: bool, constexpr: bool, constinit: bool, volatile: bool, const: bool, friend: bool, attrs: ASTAttributeList) -> None:
        ...
    
    def mergeWith(self, other: ASTDeclSpecsSimple) -> ASTDeclSpecsSimple:
        ...
    
    def describe_signature(self, signode: TextElement, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclSpecs(ASTBase):
    def __init__(self, outer: str, leftSpecs: ASTDeclSpecsSimple, rightSpecs: ASTDeclSpecsSimple, trailing: ASTTrailingTypeSpec) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTArray(ASTBase):
    def __init__(self, size: ASTExpression) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclarator(ASTBase):
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorNameParamQual(ASTDeclarator):
    def __init__(self, declId: ASTNestedName, arrayOps: list[ASTArray], paramQual: ASTParametersQualifiers) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorNameBitField(ASTDeclarator):
    def __init__(self, declId: ASTNestedName, size: ASTExpression) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorPtr(ASTDeclarator):
    def __init__(self, next: ASTDeclarator, volatile: bool, const: bool, attrs: ASTAttributeList) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorRef(ASTDeclarator):
    def __init__(self, next: ASTDeclarator, attrs: ASTAttributeList) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorParamPack(ASTDeclarator):
    def __init__(self, next: ASTDeclarator) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorMemPtr(ASTDeclarator):
    def __init__(self, className: ASTNestedName, const: bool, volatile: bool, next: ASTDeclarator) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self): # -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaratorParen(ASTDeclarator):
    def __init__(self, inner: ASTDeclarator, next: ASTDeclarator) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self): # -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def require_space_after_declSpecs(self) -> bool:
        ...
    
    def get_modifiers_id(self, version: int) -> str:
        ...
    
    def get_param_id(self, version: int) -> str:
        ...
    
    def get_ptr_suffix_id(self, version: int) -> str:
        ...
    
    def get_type_id(self, version: int, returnTypeId: str) -> str:
        ...
    
    def is_function_type(self) -> bool:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTPackExpansionExpr(ASTExpression):
    def __init__(self, expr: ASTExpression | ASTBracedInitList) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTParenExprList(ASTBaseParenExprList):
    def __init__(self, exprs: list[ASTExpression | ASTBracedInitList]) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTInitializer(ASTBase):
    def __init__(self, value: ASTExpression | ASTBracedInitList, hasAssign: bool = ...) -> None:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTType(ASTBase):
    def __init__(self, declSpecs: ASTDeclSpecs, decl: ASTDeclarator) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @name.setter
    def name(self, name: ASTNestedName) -> None:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    @property
    def trailingReturn(self) -> ASTType:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def get_type_declaration_prefix(self) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateParamConstrainedTypeWithInit(ASTBase):
    def __init__(self, type: ASTType, init: ASTType) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTypeWithInit(ASTBase):
    def __init__(self, type: ASTType, init: ASTInitializer) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTypeUsing(ASTBase):
    def __init__(self, name: ASTNestedName, type: ASTType) -> None:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def get_type_declaration_prefix(self) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTConcept(ASTBase):
    def __init__(self, nestedName: ASTNestedName, initializer: ASTInitializer) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTBaseClass(ASTBase):
    def __init__(self, name: ASTNestedName, visibility: str, virtual: bool, pack: bool) -> None:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTClass(ASTBase):
    def __init__(self, name: ASTNestedName, final: bool, bases: list[ASTBaseClass], attrs: ASTAttributeList) -> None:
        ...
    
    def get_id(self, version: int, objectType: str, symbol: Symbol) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTUnion(ASTBase):
    def __init__(self, name: ASTNestedName, attrs: ASTAttributeList) -> None:
        ...
    
    def get_id(self, version: int, objectType: str, symbol: Symbol) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTEnum(ASTBase):
    def __init__(self, name: ASTNestedName, scoped: str, underlyingType: ASTType, attrs: ASTAttributeList) -> None:
        ...
    
    def get_id(self, version: int, objectType: str, symbol: Symbol) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTEnumerator(ASTBase):
    def __init__(self, name: ASTNestedName, init: ASTInitializer | None, attrs: ASTAttributeList) -> None:
        ...
    
    def get_id(self, version: int, objectType: str, symbol: Symbol) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateParam(ASTBase):
    def get_identifier(self) -> ASTIdentifier:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, parentNode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    


class ASTTemplateKeyParamPackIdDefault(ASTTemplateParam):
    def __init__(self, key: str, identifier: ASTIdentifier, parameterPack: bool, default: ASTType) -> None:
        ...
    
    def get_identifier(self) -> ASTIdentifier:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateParamType(ASTTemplateParam):
    def __init__(self, data: ASTTemplateKeyParamPackIdDefault) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def get_identifier(self) -> ASTIdentifier:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateParamTemplateType(ASTTemplateParam):
    def __init__(self, nestedParams: ASTTemplateParams, data: ASTTemplateKeyParamPackIdDefault) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def get_identifier(self) -> ASTIdentifier:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateParamNonType(ASTTemplateParam):
    def __init__(self, param: ASTTypeWithInit | ASTTemplateParamConstrainedTypeWithInit, parameterPack: bool = ...) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def get_identifier(self) -> ASTIdentifier:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateParams(ASTBase):
    def __init__(self, params: list[ASTTemplateParam], requiresClause: ASTRequiresClause | None) -> None:
        ...
    
    def get_id(self, version: int, excludeRequires: bool = ...) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    
    def describe_signature_as_introducer(self, parentNode: desc_signature, mode: str, env: BuildEnvironment, symbol: Symbol, lineSpec: bool) -> None:
        ...
    


class ASTTemplateIntroductionParameter(ASTBase):
    def __init__(self, identifier: ASTIdentifier, parameterPack: bool) -> None:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def isPack(self) -> bool:
        ...
    
    def get_identifier(self) -> ASTIdentifier:
        ...
    
    def get_id(self, version: int, objectType: str | None = ..., symbol: Symbol | None = ...) -> str:
        ...
    
    def get_id_as_arg(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTTemplateIntroduction(ASTBase):
    def __init__(self, concept: ASTNestedName, params: list[ASTTemplateIntroductionParameter]) -> None:
        ...
    
    def get_id(self, version: int) -> str:
        ...
    
    def describe_signature_as_introducer(self, parentNode: desc_signature, mode: str, env: BuildEnvironment, symbol: Symbol, lineSpec: bool) -> None:
        ...
    


class ASTTemplateDeclarationPrefix(ASTBase):
    def __init__(self, templates: list[ASTTemplateParams | ASTTemplateIntroduction]) -> None:
        ...
    
    def get_requires_clause_in_last(self) -> ASTRequiresClause | None:
        ...
    
    def get_id_except_requires_clause_in_last(self, version: int) -> str:
        ...
    
    def describe_signature(self, signode: desc_signature, mode: str, env: BuildEnvironment, symbol: Symbol, lineSpec: bool) -> None:
        ...
    


class ASTRequiresClause(ASTBase):
    def __init__(self, expr: ASTExpression) -> None:
        ...
    
    def describe_signature(self, signode: nodes.TextElement, mode: str, env: BuildEnvironment, symbol: Symbol) -> None:
        ...
    


class ASTDeclaration(ASTBase):
    def __init__(self, objectType: str, directiveType: str | None = ..., visibility: str | None = ..., templatePrefix: ASTTemplateDeclarationPrefix | None = ..., declaration: Any = ..., trailingRequiresClause: ASTRequiresClause | None = ..., semicolon: bool = ...) -> None:
        ...
    
    def clone(self) -> ASTDeclaration:
        ...
    
    @property
    def name(self) -> ASTNestedName:
        ...
    
    @property
    def function_params(self) -> list[ASTFunctionParameter]:
        ...
    
    def get_id(self, version: int, prefixed: bool = ...) -> str:
        ...
    
    def get_newest_id(self) -> str:
        ...
    
    def describe_signature(self, signode: desc_signature, mode: str, env: BuildEnvironment, options: dict) -> None:
        ...
    


class ASTNamespace(ASTBase):
    def __init__(self, nestedName: ASTNestedName, templatePrefix: ASTTemplateDeclarationPrefix) -> None:
        ...
    


class SymbolLookupResult:
    def __init__(self, symbols: Iterator[Symbol], parentSymbol: Symbol, identOrOp: ASTIdentifier | ASTOperator, templateParams: Any, templateArgs: ASTTemplateArgs) -> None:
        ...
    


class LookupKey:
    def __init__(self, data: list[tuple[ASTNestedNameElement, ASTTemplateParams | ASTTemplateIntroduction, str]]) -> None:
        ...
    


class Symbol:
    debug_indent = ...
    debug_indent_string = ...
    debug_lookup = ...
    debug_show_tree = ...
    def __copy__(self):
        ...
    
    def __deepcopy__(self, memo): # -> Symbol:
        ...
    
    @staticmethod
    def debug_print(*args: Any) -> None:
        ...
    
    def __setattr__(self, key: str, value: Any) -> None:
        ...
    
    def __init__(self, parent: Symbol | None, identOrOp: ASTIdentifier | ASTOperator | None, templateParams: ASTTemplateParams | ASTTemplateIntroduction | None, templateArgs: Any, declaration: ASTDeclaration | None, docname: str | None, line: int | None) -> None:
        ...
    
    def remove(self) -> None:
        ...
    
    def clear_doc(self, docname: str) -> None:
        ...
    
    def get_all_symbols(self) -> Iterator[Any]:
        ...
    
    @property
    def children_recurse_anon(self) -> Generator[Symbol, None, None]:
        ...
    
    def get_lookup_key(self) -> LookupKey:
        ...
    
    def get_full_nested_name(self) -> ASTNestedName:
        ...
    
    def merge_with(self, other: Symbol, docnames: list[str], env: BuildEnvironment) -> None:
        ...
    
    def add_name(self, nestedName: ASTNestedName, templatePrefix: ASTTemplateDeclarationPrefix | None = ...) -> Symbol:
        ...
    
    def add_declaration(self, declaration: ASTDeclaration, docname: str, line: int) -> Symbol:
        ...
    
    def find_identifier(self, identOrOp: ASTIdentifier | ASTOperator, matchSelf: bool, recurseInAnon: bool, searchInSiblings: bool) -> Symbol:
        ...
    
    def direct_lookup(self, key: LookupKey) -> Symbol:
        ...
    
    def find_name(self, nestedName: ASTNestedName, templateDecls: list[Any], typ: str, templateShorthand: bool, matchSelf: bool, recurseInAnon: bool, searchInSiblings: bool) -> tuple[list[Symbol], str]:
        class QualifiedSymbolIsTemplateParam(Exception):
            ...
        
        
    
    def find_declaration(self, declaration: ASTDeclaration, typ: str, templateShorthand: bool, matchSelf: bool, recurseInAnon: bool) -> Symbol:
        ...
    
    def to_string(self, indent: int) -> str:
        ...
    
    def dump(self, indent: int) -> str:
        ...
    


class DefinitionParser(BaseParser):
    @property
    def language(self) -> str:
        ...
    
    @property
    def id_attributes(self): # -> Any:
        ...
    
    @property
    def paren_attributes(self): # -> Any:
        ...
    
    def parse_declaration(self, objectType: str, directiveType: str) -> ASTDeclaration:
        ...
    
    def parse_namespace_object(self) -> ASTNamespace:
        ...
    
    def parse_xref_object(self) -> tuple[ASTNamespace | ASTDeclaration, bool]:
        ...
    
    def parse_expression(self) -> ASTExpression | ASTType:
        ...
    


class CPPObject(ObjectDescription[ASTDeclaration]):
    """Description of a C++ language object."""
    doc_field_types: list[Field] = ...
    option_spec: OptionSpec = ...
    def add_target_and_index(self, ast: ASTDeclaration, sig: str, signode: TextElement) -> None:
        ...
    
    @property
    def object_type(self) -> str:
        ...
    
    @property
    def display_object_type(self) -> str:
        ...
    
    def get_index_text(self, name: str) -> str:
        ...
    
    def parse_definition(self, parser: DefinitionParser) -> ASTDeclaration:
        ...
    
    def describe_signature(self, signode: desc_signature, ast: ASTDeclaration, options: dict) -> None:
        ...
    
    def run(self) -> list[Node]:
        ...
    
    def handle_signature(self, sig: str, signode: desc_signature) -> ASTDeclaration:
        ...
    
    def before_content(self) -> None:
        ...
    
    def after_content(self) -> None:
        ...
    


class CPPTypeObject(CPPObject):
    object_type = ...


class CPPConceptObject(CPPObject):
    object_type = ...


class CPPMemberObject(CPPObject):
    object_type = ...


class CPPFunctionObject(CPPObject):
    object_type = ...
    doc_field_types = ...


class CPPClassObject(CPPObject):
    object_type = ...
    @property
    def display_object_type(self) -> str:
        ...
    


class CPPUnionObject(CPPObject):
    object_type = ...


class CPPEnumObject(CPPObject):
    object_type = ...


class CPPEnumeratorObject(CPPObject):
    object_type = ...


class CPPNamespaceObject(SphinxDirective):
    """
    This directive is just to tell Sphinx that we're documenting stuff in
    namespace foo.
    """
    has_content = ...
    required_arguments = ...
    optional_arguments = ...
    final_argument_whitespace = ...
    option_spec: OptionSpec = ...
    def run(self) -> list[Node]:
        ...
    


class CPPNamespacePushObject(SphinxDirective):
    has_content = ...
    required_arguments = ...
    optional_arguments = ...
    final_argument_whitespace = ...
    option_spec: OptionSpec = ...
    def run(self) -> list[Node]:
        ...
    


class CPPNamespacePopObject(SphinxDirective):
    has_content = ...
    required_arguments = ...
    optional_arguments = ...
    final_argument_whitespace = ...
    option_spec: OptionSpec = ...
    def run(self) -> list[Node]:
        ...
    


class AliasNode(nodes.Element):
    def __init__(self, sig: str, aliasOptions: dict, env: BuildEnvironment | None = ..., parentKey: LookupKey | None = ...) -> None:
        ...
    
    def copy(self) -> AliasNode:
        ...
    


class AliasTransform(SphinxTransform):
    default_priority = ...
    def apply(self, **kwargs: Any) -> None:
        ...
    


class CPPAliasObject(ObjectDescription):
    option_spec: OptionSpec = ...
    def run(self) -> list[Node]:
        """
        On purpose this doesn't call the ObjectDescription version, but is based on it.
        Each alias signature may expand into multiple real signatures (an overload set).
        The code is therefore based on the ObjectDescription version.
        """
        ...
    


class CPPXRefRole(XRefRole):
    def process_link(self, env: BuildEnvironment, refnode: Element, has_explicit_title: bool, title: str, target: str) -> tuple[str, str]:
        ...
    


class CPPExprRole(SphinxRole):
    def __init__(self, asCode: bool) -> None:
        ...
    
    def run(self) -> tuple[list[Node], list[system_message]]:
        ...
    


class CPPDomain(Domain):
    """C++ language domain.

    There are two 'object type' attributes being used::

    - Each object created from directives gets an assigned .objtype from ObjectDescription.run.
      This is simply the directive name.
    - Each declaration (see the distinction in the directives dict below) has a nested .ast of
      type ASTDeclaration. That object has .objectType which corresponds to the keys in the
      object_types dict below. They are the core different types of declarations in C++ that
      one can document.
    """
    name = ...
    label = ...
    object_types = ...
    directives = ...
    roles = ...
    initial_data = ...
    def clear_doc(self, docname: str) -> None:
        ...
    
    def process_doc(self, env: BuildEnvironment, docname: str, document: nodes.document) -> None:
        ...
    
    def process_field_xref(self, pnode: pending_xref) -> None:
        ...
    
    def merge_domaindata(self, docnames: list[str], otherdata: dict) -> None:
        ...
    
    def resolve_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, typ: str, target: str, node: pending_xref, contnode: Element) -> Element | None:
        ...
    
    def resolve_any_xref(self, env: BuildEnvironment, fromdocname: str, builder: Builder, target: str, node: pending_xref, contnode: Element) -> list[tuple[str, Element]]:
        ...
    
    def get_objects(self) -> Iterator[tuple[str, str, str, str, str, int]]:
        ...
    
    def get_full_qualified_name(self, node: Element) -> str:
        ...
    


def setup(app: Sphinx) -> dict[str, Any]:
    ...

