Files
2025-10-25 03:02:53 +03:00

130 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[gram.class]
# Annex A (informative) Grammar summary [[gram]](./#gram)
## A.9 Classes [gram.class]
[class-name:](class.pre#nt:class-name "11.1Preamble[class.pre]")
[*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]")
[*simple-template-id*](temp.names#nt:simple-template-id "13.3Names of template specializations[temp.names]")
[class-specifier:](class.pre#nt:class-specifier "11.1Preamble[class.pre]")
[*class-head*](class.pre#nt:class-head "11.1Preamble[class.pre]") { [*member-specification*](class.mem.general#nt:member-specification "11.4.1General[class.mem.general]")opt }
[class-head:](class.pre#nt:class-head "11.1Preamble[class.pre]")
[*class-key*](class.pre#nt:class-key "11.1Preamble[class.pre]") [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt [*class-head-name*](class.pre#nt:class-head-name "11.1Preamble[class.pre]") [*class-property-specifier-seq*](class.pre#nt:class-property-specifier-seq "11.1Preamble[class.pre]")opt [*base-clause*](class.derived.general#nt:base-clause "11.7.1General[class.derived.general]")opt
[*class-key*](class.pre#nt:class-key "11.1Preamble[class.pre]") [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt [*base-clause*](class.derived.general#nt:base-clause "11.7.1General[class.derived.general]")opt
[class-head-name:](class.pre#nt:class-head-name "11.1Preamble[class.pre]")
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3Qualified names[expr.prim.id.qual]")opt [*class-name*](class.pre#nt:class-name "11.1Preamble[class.pre]")
[class-property-specifier-seq:](class.pre#nt:class-property-specifier-seq "11.1Preamble[class.pre]")
[*class-property-specifier*](class.pre#nt:class-property-specifier "11.1Preamble[class.pre]") [*class-property-specifier-seq*](class.pre#nt:class-property-specifier-seq "11.1Preamble[class.pre]")opt
[class-property-specifier:](class.pre#nt:class-property-specifier "11.1Preamble[class.pre]")
final
trivially_relocatable_if_eligible
replaceable_if_eligible
[class-key:](class.pre#nt:class-key "11.1Preamble[class.pre]")
class
struct
union
[member-specification:](class.mem.general#nt:member-specification "11.4.1General[class.mem.general]")
[*member-declaration*](class.mem.general#nt:member-declaration "11.4.1General[class.mem.general]") [*member-specification*](class.mem.general#nt:member-specification "11.4.1General[class.mem.general]")opt
[*access-specifier*](class.derived.general#nt:access-specifier "11.7.1General[class.derived.general]") : [*member-specification*](class.mem.general#nt:member-specification "11.4.1General[class.mem.general]")opt
[member-declaration:](class.mem.general#nt:member-declaration "11.4.1General[class.mem.general]")
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt [*decl-specifier-seq*](dcl.spec.general#nt:decl-specifier-seq "9.2.1General[dcl.spec.general]")opt [*member-declarator-list*](class.mem.general#nt:member-declarator-list "11.4.1General[class.mem.general]")opt ;
[*function-definition*](dcl.fct.def.general#nt:function-definition "9.6.1General[dcl.fct.def.general]")
[*friend-type-declaration*](class.mem.general#nt:friend-type-declaration "11.4.1General[class.mem.general]")
[*using-declaration*](namespace.udecl#nt:using-declaration "9.10The using declaration[namespace.udecl]")
[*using-enum-declaration*](enum.udecl#nt:using-enum-declaration "9.8.2The using enum declaration[enum.udecl]")
[*static_assert-declaration*](dcl.pre#nt:static_assert-declaration "9.1Preamble[dcl.pre]")
[*consteval-block-declaration*](dcl.pre#nt:consteval-block-declaration "9.1Preamble[dcl.pre]")
[*template-declaration*](temp.pre#nt:template-declaration "13.1Preamble[temp.pre]")
[*explicit-specialization*](temp.expl.spec#nt:explicit-specialization "13.9.4Explicit specialization[temp.expl.spec]")
[*deduction-guide*](temp.deduct.guide#nt:deduction-guide "13.7.2.3Deduction guides[temp.deduct.guide]")
[*alias-declaration*](dcl.pre#nt:alias-declaration "9.1Preamble[dcl.pre]")
[*opaque-enum-declaration*](dcl.enum#nt:opaque-enum-declaration "9.8.1Enumeration declarations[dcl.enum]")
[*empty-declaration*](dcl.pre#nt:empty-declaration "9.1Preamble[dcl.pre]")
[member-declarator-list:](class.mem.general#nt:member-declarator-list "11.4.1General[class.mem.general]")
[*member-declarator*](class.mem.general#nt:member-declarator "11.4.1General[class.mem.general]")
[*member-declarator-list*](class.mem.general#nt:member-declarator-list "11.4.1General[class.mem.general]") , [*member-declarator*](class.mem.general#nt:member-declarator "11.4.1General[class.mem.general]")
[member-declarator:](class.mem.general#nt:member-declarator "11.4.1General[class.mem.general]")
[*declarator*](dcl.decl.general#nt:declarator "9.3.1General[dcl.decl.general]") [*virt-specifier-seq*](class.mem.general#nt:virt-specifier-seq "11.4.1General[class.mem.general]")opt [*function-contract-specifier-seq*](dcl.contract.func#nt:function-contract-specifier-seq "9.4.1General[dcl.contract.func]")opt [*pure-specifier*](class.mem.general#nt:pure-specifier "11.4.1General[class.mem.general]")opt
[*declarator*](dcl.decl.general#nt:declarator "9.3.1General[dcl.decl.general]") [*requires-clause*](temp.pre#nt:requires-clause "13.1Preamble[temp.pre]") [*function-contract-specifier-seq*](dcl.contract.func#nt:function-contract-specifier-seq "9.4.1General[dcl.contract.func]")opt
[*declarator*](dcl.decl.general#nt:declarator "9.3.1General[dcl.decl.general]") [*brace-or-equal-initializer*](dcl.init.general#nt:brace-or-equal-initializer "9.5.1General[dcl.init.general]")
[*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]")opt [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt : [*constant-expression*](expr.const#nt:constant-expression "7.7Constant expressions[expr.const]") [*brace-or-equal-initializer*](dcl.init.general#nt:brace-or-equal-initializer "9.5.1General[dcl.init.general]")opt
[virt-specifier-seq:](class.mem.general#nt:virt-specifier-seq "11.4.1General[class.mem.general]")
[*virt-specifier*](class.mem.general#nt:virt-specifier "11.4.1General[class.mem.general]") [*virt-specifier-seq*](class.mem.general#nt:virt-specifier-seq "11.4.1General[class.mem.general]")opt
[virt-specifier:](class.mem.general#nt:virt-specifier "11.4.1General[class.mem.general]")
override
final
[pure-specifier:](class.mem.general#nt:pure-specifier "11.4.1General[class.mem.general]")
= 0
[friend-type-declaration:](class.mem.general#nt:friend-type-declaration "11.4.1General[class.mem.general]")
friend [*friend-type-specifier-list*](class.mem.general#nt:friend-type-specifier-list "11.4.1General[class.mem.general]") ;
[friend-type-specifier-list:](class.mem.general#nt:friend-type-specifier-list "11.4.1General[class.mem.general]")
[*friend-type-specifier*](class.mem.general#nt:friend-type-specifier "11.4.1General[class.mem.general]") ...opt
[*friend-type-specifier-list*](class.mem.general#nt:friend-type-specifier-list "11.4.1General[class.mem.general]") , [*friend-type-specifier*](class.mem.general#nt:friend-type-specifier "11.4.1General[class.mem.general]") ...opt
[friend-type-specifier:](class.mem.general#nt:friend-type-specifier "11.4.1General[class.mem.general]")
[*simple-type-specifier*](dcl.type.simple#nt:simple-type-specifier "9.2.9.3Simple type specifiers[dcl.type.simple]")
[*elaborated-type-specifier*](dcl.type.elab#nt:elaborated-type-specifier "9.2.9.5Elaborated type specifiers[dcl.type.elab]")
[*typename-specifier*](temp.res.general#nt:typename-specifier "13.8.1General[temp.res.general]")
[conversion-function-id:](class.conv.fct#nt:conversion-function-id "11.4.8.3Conversion functions[class.conv.fct]")
operator [*conversion-type-id*](class.conv.fct#nt:conversion-type-id "11.4.8.3Conversion functions[class.conv.fct]")
[conversion-type-id:](class.conv.fct#nt:conversion-type-id "11.4.8.3Conversion functions[class.conv.fct]")
[*type-specifier-seq*](dcl.type.general#nt:type-specifier-seq "9.2.9.1General[dcl.type.general]") [*conversion-declarator*](class.conv.fct#nt:conversion-declarator "11.4.8.3Conversion functions[class.conv.fct]")opt
[conversion-declarator:](class.conv.fct#nt:conversion-declarator "11.4.8.3Conversion functions[class.conv.fct]")
[*ptr-operator*](dcl.decl.general#nt:ptr-operator "9.3.1General[dcl.decl.general]") [*conversion-declarator*](class.conv.fct#nt:conversion-declarator "11.4.8.3Conversion functions[class.conv.fct]")opt
[base-clause:](class.derived.general#nt:base-clause "11.7.1General[class.derived.general]")
: [*base-specifier-list*](class.derived.general#nt:base-specifier-list "11.7.1General[class.derived.general]")
[base-specifier-list:](class.derived.general#nt:base-specifier-list "11.7.1General[class.derived.general]")
[*base-specifier*](class.derived.general#nt:base-specifier "11.7.1General[class.derived.general]") ...opt
[*base-specifier-list*](class.derived.general#nt:base-specifier-list "11.7.1General[class.derived.general]") , [*base-specifier*](class.derived.general#nt:base-specifier "11.7.1General[class.derived.general]") ...opt
[base-specifier:](class.derived.general#nt:base-specifier "11.7.1General[class.derived.general]")
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt [*class-or-decltype*](class.derived.general#nt:class-or-decltype "11.7.1General[class.derived.general]")
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt virtual [*access-specifier*](class.derived.general#nt:access-specifier "11.7.1General[class.derived.general]")opt [*class-or-decltype*](class.derived.general#nt:class-or-decltype "11.7.1General[class.derived.general]")
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt [*access-specifier*](class.derived.general#nt:access-specifier "11.7.1General[class.derived.general]") virtualopt [*class-or-decltype*](class.derived.general#nt:class-or-decltype "11.7.1General[class.derived.general]")
[class-or-decltype:](class.derived.general#nt:class-or-decltype "11.7.1General[class.derived.general]")
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3Qualified names[expr.prim.id.qual]")opt [*type-name*](dcl.type.simple#nt:type-name "9.2.9.3Simple type specifiers[dcl.type.simple]")
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3Qualified names[expr.prim.id.qual]") template [*simple-template-id*](temp.names#nt:simple-template-id "13.3Names of template specializations[temp.names]")
[*computed-type-specifier*](dcl.type.simple#nt:computed-type-specifier "9.2.9.3Simple type specifiers[dcl.type.simple]")
[access-specifier:](class.derived.general#nt:access-specifier "11.7.1General[class.derived.general]")
private
protected
public
[ctor-initializer:](class.base.init#nt:ctor-initializer "11.9.3Initializing bases and members[class.base.init]")
: [*mem-initializer-list*](class.base.init#nt:mem-initializer-list "11.9.3Initializing bases and members[class.base.init]")
[mem-initializer-list:](class.base.init#nt:mem-initializer-list "11.9.3Initializing bases and members[class.base.init]")
[*mem-initializer*](class.base.init#nt:mem-initializer "11.9.3Initializing bases and members[class.base.init]") ...opt
[*mem-initializer-list*](class.base.init#nt:mem-initializer-list "11.9.3Initializing bases and members[class.base.init]") , [*mem-initializer*](class.base.init#nt:mem-initializer "11.9.3Initializing bases and members[class.base.init]") ...opt
[mem-initializer:](class.base.init#nt:mem-initializer "11.9.3Initializing bases and members[class.base.init]")
[*mem-initializer-id*](class.base.init#nt:mem-initializer-id "11.9.3Initializing bases and members[class.base.init]") ( [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1General[expr.post.general]")opt )
[*mem-initializer-id*](class.base.init#nt:mem-initializer-id "11.9.3Initializing bases and members[class.base.init]") [*braced-init-list*](dcl.init.general#nt:braced-init-list "9.5.1General[dcl.init.general]")
[mem-initializer-id:](class.base.init#nt:mem-initializer-id "11.9.3Initializing bases and members[class.base.init]")
[*class-or-decltype*](class.derived.general#nt:class-or-decltype "11.7.1General[class.derived.general]")
[*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]")