declaration-seq:
declaration
declaration-seq declaration
declaration:
block-declaration
function-definition
template-declaration
explicit-instantiation
explicit-specialization
linkage-specification
namespace-definition
block-declaration:
simple-declaration
asm-definition
namespace-alias-definition
using-declaration
using-directive
simple-declaration:
decl-specifier-seqinit-declarator-list
;
decl-specifier:
storage-class-specifier
type-specifier
function-specifier
friend
typedef
decl-specifier-seq:
decl-specifier-seqdecl-specifier
storage-class-specifier:
auto
register
static
extern
mutable
function-specifier:
inline
virtual
explicit
typedef-name:
identifier
type-specifier:
simple-type-specifier
class-specifier
enum-specifier
elaborated-type-specifier
cv-qualifier
simple-type-specifier:
::nested-name-specifier
type-name
char
wchar_t
bool
short
int
long
signed
unsigned
float
double
void
type-name:
class-name
enum-name
typedef-name
elaborated-type-specifier:
class-key ::nested-name-specifier
identifier
enum ::nested-name-specifier
identifier
typename ::nested-name-specifier identifier
typename ::nested-name-specifier identifier
<
template-argument-list>
enum-name:
identifier
enum-specifier:
enum identifier![]()
{
enumerator-list![]()
}
enumerator-list:
enumerator-definition
enumerator-list,
enumerator-definition
enumerator-definition:
enumerator
enumerator=
constant-expression
enumerator:
identifier
namespace-name:
original-namespace-name
namespace-alias
original-namespace-name:
identifier
namespace-definition:
named-namespace-definition
unnamed-namespace-definition
named-namespace-definition:
original-namespace-definition
extension-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-seq![]()
namespace-alias:
identifier
namespace-alias-definition:
namespace identifier = qualified-namespace-specifier;
qualified-namespace-specifier:
::nested-name-specifier
namespace-name
using-declaration:
using typename::
nested-name-specifier unqualified-id
;
using :: unqualified-id;
using-directive:
using namespace ::nested-name-specifier
namespace-name
;
asm-definition:
asm ( string-literal)
;
linkage-specification:
extern string-literal{
declaration-seq![]()
}
extern string-literal declaration