Annex A (informative) Grammar summary [gram] (original) (raw)

A.9 Classes [gram.class]

class-name:
identifier
simple-template-id

class-specifier:
class-head { member-specification }

class-head:
class-key attribute-specifier-seq class-head-name class-property-specifier-seq base-clause
class-key attribute-specifier-seq base-clause

class-head-name:
nested-name-specifier class-name

class-property-specifier-seq:
class-property-specifier class-property-specifier-seq

class-property-specifier:
final
trivially_relocatable_if_eligible
replaceable_if_eligible

class-key:
class
struct
union

member-specification:
member-declaration member-specification
access-specifier : member-specification

member-declaration:
attribute-specifier-seq decl-specifier-seq member-declarator-list ;
function-definition
friend-type-declaration
using-declaration
using-enum-declaration
static_assert-declaration
template-declaration
explicit-specialization
deduction-guide
alias-declaration
opaque-enum-declaration
empty-declaration

member-declarator-list:
member-declarator
member-declarator-list , member-declarator

member-declarator:
declarator virt-specifier-seq function-contract-specifier-seq pure-specifier
declarator requires-clause function-contract-specifier-seq
declarator brace-or-equal-initializer
identifier attribute-specifier-seq : constant-expression brace-or-equal-initializer

virt-specifier-seq:
virt-specifier virt-specifier-seq

virt-specifier:
override
final

pure-specifier:
= 0

friend-type-declaration:
friend friend-type-specifier-list ;

friend-type-specifier-list:
friend-type-specifier ...
friend-type-specifier-list , friend-type-specifier ...

friend-type-specifier:
simple-type-specifier
elaborated-type-specifier
typename-specifier

conversion-function-id:
operator conversion-type-id

conversion-type-id:
type-specifier-seq conversion-declarator

conversion-declarator:
ptr-operator conversion-declarator

base-clause:
: base-specifier-list

base-specifier-list:
base-specifier ...
base-specifier-list , base-specifier ...

base-specifier:
attribute-specifier-seq class-or-decltype
attribute-specifier-seq virtual access-specifier class-or-decltype
attribute-specifier-seq access-specifier virtual class-or-decltype

class-or-decltype:
nested-name-specifier type-name
nested-name-specifier template simple-template-id
computed-type-specifier

access-specifier:
private
protected
public

ctor-initializer:
: mem-initializer-list

mem-initializer-list:
mem-initializer ...
mem-initializer-list , mem-initializer ...

mem-initializer:
mem-initializer-id ( expression-list )
mem-initializer-id braced-init-list

mem-initializer-id:
class-or-decltype
identifier