6 Statements [stmt.stmt]

6.1 Labeled statement [stmt.label]

A statement can be labeled.

labeled-statement:
    attribute-specifier-seqopt identifier : statement
    attribute-specifier-seqopt case constant-expression : statement
    attribute-specifier-seqopt default : statement

The optional attribute-specifier-seq appertains to the label. An identifier label declares the identifier. The only use of an identifier label is as the target of a goto. The scope of a label is the function in which it appears. Labels shall not be redeclared within a function. A label can be used in a goto statement before its declaration. Labels have their own name space and do not interfere with other identifiers. [ Note: A label may have the same name as another declaration in the same scope or a template-parameter from an enclosing scope. Unqualified name lookup ([basic.lookup.unqual]) ignores labels.  — end note ]

Case labels and default labels shall occur only in switch statements.