Same const type qualifier

It's explicitly allowed in the typedef case, and disallowed in the declaration itself:

[dcl.type/1]

The type-specifiers are:

type-specifier : ... cv-qualifier
defining-type-specifier : type-specifier

[dcl.spec/1 and 2]

The specifiers that can be used in a declaration are:

decl-specifier : ... defining-type-specifier ...

Each decl-specifier shall appear at most once in a complete decl-specifier-seq, except that long may appear twice.

[dcl.type.cv/1]

There are two cv-qualifiers, const and volatile. Each cv-qualifier shall appear at most once in a cv-qualifier-seq. If a cv-qualifier appears in a decl-specifier-seq, the init-declarator-list or member-declarator-list of the declaration shall not be empty. [ Note: [basic.type.qualifier] and [dcl.fct] describe how cv-qualifiers affect object and function types.  — end note ] Redundant cv-qualifications are ignored. [ Note: For example, these could be introduced by typedefs. — end note ]

Besides type aliases, a template parameter is another case where the qualifier could be redundant. The rationale for allowing this, is to not break otherwise correct declarations just because a cv-qualifier snuck in the back door.