[dcl.decl.general]

Each init-declarator or member-declarator in a declaration is analyzed separately as if it were in a declaration by itself.

[Note 2:

A declaration with several declarators is usually equivalent to the corresponding sequence of declarations each with a single declarator.

That is, T D1, D2, ... Dn; is usually equivalent to T D1; T D2; ... T Dn; where T is a decl-specifier-seq and each Di is an init-declarator or member-declarator.

One exception is when a name introduced by one of the declarators hides a type name used by the decl-specifiers, so that when the same decl-specifiers are used in a subsequent declaration, they do not have the same meaning, as in struct S { }; S S, T; which is not equivalent to struct S { }; S S; S T;

Another exception is when T is auto ([dcl.spec.auto]), for example: auto i = 1, j = 2.0; as opposed to auto i = 1; auto j = 2.0;

— end note]