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