- class-name:
- identifier
- enum-name:
- identifier
- typedef-name:
- identifier
- identifier: one of
- nondigit
identifier nondigit
identifier digit - nondigit: one of
- _ a b c d e f g h i j k l m
n o p q r s t u v w x y z
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z - digit: one of
- 0 1 2 3 4 5 6 7 8 9
- expression:
- assignment-expression
expression , assignment-expression - assignment-expression:
- conditional-expression
unary-expression assignment-operator assignment-expression - assignment-operator: one of
- = *= /= %= += –= >= <= &= ^= |=
- conditional-expression:
- logical-or-expression
logical-or-expression ? expression : conditional-expression - logical-or-expression:
- logical-and-expression
logical-or-expression || logical-and-expression - logical-and-expression:
- inclusive-or-expression
logical-and-expression && inclusive-or-expression - inclusive-or-expression:
- exclusive-or-expression
inclusive-or-expression | exclusive-or-expression - exclusive-or-expression:
- and-expression
exclusive-or-expression ^ and-expression - and-expression:
- equality-expression
and-expression & equality-expression - equality-expression:
- relational-expression
equality-expression == relational-expression
equality-expression != relational-expression - relational-expression:
- shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression => shift-expression - shift-expression:
- additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression - additive-expression:
- multiplicative-expression
additive-expression + multiplicative-expression
additive-expression – multiplicative-expression - multiplicative-expression:
- segment-expression
multiplicative-expression * segment-expression
multiplicative-expression / segment-expression
multiplicative-expression % segment-expression - segment-expression:
- pm-expression
segment-expression :> pm-expression - pm-expression:
- cast-expression
pm-expression .* cast-expression
pm-expression –>* cast-expression - cast-expression:
- unary-expression
( type-name ) cast-expression - unary-expression:
- postfix-expression
++ unary-expression
–– unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
allocation-expression
deallocation-expression - unary-operator: one of
- * & + – ! ~
- allocation-expression:
- ::opt new placementopt new-type-name new-initializeropt
::opt new placementopt ( type-name ) new-initializeropt - placement:
- ( expression-list )
- new-type-name:
- type-specifier-list new-declaratoropt
- new-declarator:
- ms-modifier-list opt * cv-qualifier-list opt new-declaratoropt
ms-modifier-list opt complete-class-name :: *cv-qualifier-listopt
new-declaratoropt
new-declaratoropt [ expression ] - new-initializer:
- ( initializer-list )
- deallocation-expression:
- ::opt delete cast-expression
::opt delete [ ] cast-expression - postfix-expression:
- primary-expression
postfix-expression [ expression ]
postfix-expression ( expression-list )
simple-type-name ( expression-list )
postfix-expression . name
postfix-expression –> name
postfix-expression ++
postfix-expression ––
dynamic_cast < type-id > ( expression )
static_cast < type-id > ( expression )
const_cast < type-id > ( expression )
reinterpret_cast < type-id > ( expression )
typeid( expression )
typeid( type-id ) - expression-list:
- assignment-expression
expression-list , assignment-expression - primary-expression:
- literal
this
:: identifier
:: operator-function-name
:: qualified-name ( expression )
name - name:
- identifier
operator-function-name
conversion-function-name
~ class-name
qualified-name - qualified-name:
- ms-modifier-listopt qualified-class-name :: name
- literal:
- integer-constant
character-constant
floating-constant
string-literal - integer-constant:
- decimal-constant integer-suffixopt
octal-constant integer-suffixopt
hexadecimal-constant integer-suffixopt
'c-char-sequence' - decimal-constant:
- nonzero-digit
decimal-constant digit - octal-constant:
- 0
octal-constant octal-digit - hexadecimal-constant:
- 0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-constant hexadecimal-digit - nonzero-digit: one of
- 1 2 3 4 5 6 7 8 9
- octal-digit: one of
- 0 1 2 3 4 5 6 7
- hexadecimal-digit: one of
- 0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F - integer-suffix:
- unsigned-suffix long-suffixopt
long-suffix unsigned-suffixopt - unsigned-suffix: one of
- u U
- long-suffix: one of
- l L
- character-constant:
- 'c-char-sequence'
L'c-char-sequence' - c-char-sequence:
- c-char
c-char-sequence c-char - c-char:
- any member of the source character set except the single quote (
'
),
backslash (\
), or newline character
escape-sequence - escape-sequence:
- simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence - simple-escape-sequence: one of
- \' \" \? \\
\a \b \f \n \r \t \v - octal-escape-sequence:
- \ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit - hexadecimal-escape-sequence:
- \xhexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit - floating-constant:
- fractional-constant exponent-partopt floating-suffixopt
digit-sequence exponent-part floating-suffixopt - fractional-constant:
- digit-sequenceopt . digit-sequence
digit-sequence . - exponent-part:
- e signopt digit-sequence
E signopt digit-sequence - sign: one of
- + –
- digit-sequence:
- digit
digit-sequence digit - floating-suffix: one of
- f l F L
- string literal:
- ''s-char-sequence opt''
L ''s-char-sequence opt'' - s-char-sequence:
- s-char
s-char-sequence s-char - s-char:
- any member of the source character set except double quotation marks ("), backslash (\), or newline character
escape-sequence
- declaration:
- decl-specifiersopt declarator-listopt ;
asm-declaration
function-definition
linkage-specification
template-declaration: - asm-declaration:
- __asm( string-literal );
- decl-specifiers:
- decl-specifiersopt decl-specifier
- decl-specifier:
- storage-class-specifier
type-specifier
fct-specifier
friend
typedef
__declspec ( extended-decl-modifier-seq ) - storage-class-specifier:
- auto
register
static
extern - fct-specifier:
- inline
virtual - type-specifier:
- simple-type-name
class-specifier
enum-specifier
elaborated-type-specifier
const
volatile - extended-decl-modifier-seq:
- extended-decl-modifieropt
extended-decl-modifier extended-decl-modifier-seq - extended-decl-modifier:
- align(#)
allocate("segname")
dllimport
dllexport
nake
noinline
noreturn
nothrow
novtable
property({get=get_func_name|, put=put_func_name})
selectany
thread
uuid("ComObjectGUID") - simple-type-name:
- complete-class-name
qualified-type-name
char
short
int
long
signed
unsigned
float
double
void - elaborated-type-specifier:
- class-key identifier
class-key class-name
enum-name - class-key:
- class
struct
union - qualified-type-name:
- typedef-name
class-name :: qualified-type-name - complete-class-name:
- qualified-class-name
:: qualified-class-name - qualified-class-name:
- class-name
class-name :: qualified-class-name - enum-specifier:
- enum identifieropt { enum-listopt }
- enum-list:
- enumerator
enum-list , enumerator - enumerator:
- identifier
identifier = constant-expression - constant-expression:
- conditional-expression
- linkage-specification:
- extern string-literal { declaration-listopt }
extern string-literal declaration - declaration-list:
- declaration
declaration-list declaration - template-declaration:
- template < template-argument-list > declaration
- template-argument-list:
- template-argument
template-argument-list , template-argument - template-argument:
- type-argument
argument-declaration - type-argument:
- class identifier
- template-class-name:
- template-name < template-arg-list >
- template-arg-list:
- template-arg
template-arg-list , template-arg - template-arg:
- expression
type-name - original-namespace-name :
- identifier
- namespace-definition :
- original-namespace-definition
extension-namespace-definition
unnamed-namespace-definition - original-namespace-definition :
- namespace identifier { namespace-body }
- extension-namespace-definition :
- namespace original-namespace-name { namespace-body }
- unnamed-namespace-definition :
- namespace { namespace-body }
- namespace-body :
- declaration-seqopt
- id-expression :
- unqualified-id
qualified-id - nested-name-specifier :
- class-or-namespace-name :: nested-name-specifieropt
- class-or-namespace-name :
- class-name
namespace-name - namespace-name :
- original-namespace-name
namespace-alias - namespace-alias :
- identifier
- namespace-alias-definition :
- namespace identifier = qualified-namespace-specifier;
- qualified-namespace-specifier :
- ::opt nested-name-specifieropt class-or-namespace-name
- using-declaration :
- using ::opt nested-name-specifier unqualified-id
using :: unqualified-id - using-directive :
- using namespace ::opt nested-name-specifieropt namespace-name
- declarator-list:
- init-declarator
declarator-list , init-declarator - init-declarator:
- ms-modifier-listopt declarator initializeropt
- declarator:
- dname
ptr-operator declarator
declarator ( argument-declaration-list ) cv-mod-listopt
declarator [ constant-expressionopt ]
( declarator ) - cv-mod-list:
- cv-qualifier cv-mod-listopt
- ptr-operator:
- ms-modifier-listopt * cv-qualifier-listopt
ms-modifier-listopt & cv-qualifier-listopt
ms-modifier-listopt complete-class-name :: * cv-qualifier-listopt - cv-qualifier-list:
- cv-qualifier cv-qualifier-listopt
- cv-qualifier:
- const
volatile - dname:
- name
class-name
~ class-name
typedef-name
qualified-type-name - type-name:
- type-specifier-list ms-modifier-listopt abstract-declaratoropt
- type-specifier-list:
- type-specifier type-specifier-listopt
- abstract-declarator:
- ptr-operator ms-modifier-listopt abstract-declaratoropt
abstract-declaratoropt ( argument-declaration-list ) cv-qualifier-listopt
abstract-declaratoropt [ constant-expressionopt ]
( ms-modifier-listopt abstract-declarator ) - argument-declaration-list:
- arg-declaration-listopt . . .opt
arg-declaration-list , . . . - arg-declaration-list:
- argument-declaration
arg-declaration-list , argument-declaration - argument-declaration:
- decl-specifiers ms-modifier-listopt declarator
decl-specifiers ms-modifier-listopt declarator = expression
decl-specifiers ms-modifier-listopt abstract-declaratoropt
decl-specifiers ms-modifier-listopt abstract-declaratoropt = expression - function-definition:
- decl-specifiersopt ms-modifier-listopt declarator ctor-initializeropt fct-body
- fct-body:
- compound-statement
- initializer:
- = expression
= { initializer-list ,opt }
( expression-list ) - initializer-list:
- expression
initializer-list , expression
{ initializer-list ,opt }
- class-specifier:
- class-head { member-listopt }
- class-head:
- class-key ambient-modelopt identifieropt base-specopt
class-key ambient-modelopt class-name base-specopt - member-list:
- member-declaration member-listopt
access-specifier : member-listopt - member-declaration:
- decl-specifiersopt member-declarator-listopt ;
function-definition ;opt
qualified-name ; - member-declarator-list:
- member-declarator
member-declarator-list , member-declarator - member-declarator:
- ms-modifier-listopt declarator pure-specifieropt
identifieropt : constant-expression - pure-specifier:
- = 0
- base-spec:
- : base-list
- base-list:
- base-specifier
base-list , base-specifier - base-specifier:
- complete-class-name
virtual access-specifieropt complete-class-name
access-specifier virtualopt complete-class-name - access-specifier:
- private
protected
public - conversion-function-name:
- operator conversion-type-name
- conversion-type-name:
- type-specifier-list ptr-operatoropt
- ctor-initializer:
- : mem-initializer-list
- mem-initializer-list:
- mem-initializer
mem-initializer , mem-initializer-list - mem-initializer:
- complete-class-name ( expression-listopt )
identifier ( expression-listopt ) - operator-function-name:
- operator operator
- operator: one of
- new delete
+ – * / % ^ & | ~
! = < > += –= *= /= %=
^= &= |= << >> >>= <<= == !=
<= >= && || ++ –– , –>* –>
() []
- statement:
- labeled-statement
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
declaration-statement
asm-statement
try-except-statement
try-finally-statement - labeled-statement:
- identifier : statement
case constant-expression : statement
default : statement - expression-statement:
- expressionopt ;
- compound-statement:
- { statement-listopt }
- statement-list:
- statement
statement-list statement - selection-statement:
- if ( expression ) statement
if ( expression ) statement else statement
switch ( expression ) statement - iteration-statement:
- while ( expression ) statement
do statement while ( expression ) ;
for ( for-init-statement expressionopt ; expressionopt ) statement - for-init-statement:
- expression-statement
declaration-statement - jump-statement:
- break ;
continue ;
return expressionopt ;
goto identifier ; - declaration-statement:
- declaration
- try-except-statement:
- __try compound-statement
__except ( expression ) compound-statement - try-finally-statement:
- __try compound-statement
__finally ( expression ) compound-statement
- asm-statement:
- __asm assembly-instruction ;opt
__asm { assembly-instruction-list } ;opt - assembly-instruction-list:
- assembly-instruction ;opt
assembly-instruction ; assembly-instruction-list ;opt - ms-modifier-list:
- ms-modifier ms-modifier-listopt
- ms-modifier:
- __cdecl
__fastcall
__stdcall
__syscall (reserved for future implementations)
__oldcall (reserved for future implementations)
__unaligned (reserved for future implementations)
based-modifier - based-modifier:
- __based ( based-type )
- based-type:
- name