The OP's question points out that a sentence in the C standard regarding pointer declarators does not make sense in isolation and argues that the sentence is inappropriate.
On the other hand, in latest public working draft of C (n3550), the sentence in question remains unchanged but has been augmented by a newly added sentence reinforcing the same point - that type qualifiers or attributes are applied to the pointer itself, not the data being pointed to. Also, as user17074451 pointed out, the sentence has been there since the begining. Possible reasons why people accept this sentence might be:
A worse mistake as user17074451 explained, could overshadow the ambiguity of the sentence.
The sentence might simply have become familiar to everyone.
There might be nothing wrong with the sentence.
Since the OP finds the previous sentence understandable, we can start from there.
... the type specified for ident is “derived-declarator-type-list type-qualifier-list pointer to T”.
This specifies the type of ident as "... pointer to T".
Now, examining the sentence in question.
... ident is a so-qualified pointer.
OP argues that because the sentence states that ident is so-qualified pointer, ident's type should explicitly be a pointer, meaning the qualifier should be applied directly to ident's type.
However, as user17074451 mentioned array declarator, this interpretation clearly does not hold when the declarator includes both a pointer declarator and an array declarator.
Example: Let's consider the declaration int * const foo[10]
.
T D1 : int * const foo[10]
T: int
D1: * const foo[10]
D: foo[10]
type-qualifier-list: const
derived-declarator-type list: derived from T D
for ident, which is "size-10 array of".
ident type: size-10 array of const
pointer to int.
clarification: the pointer to int is const
-qualified.
If the sentence in question really implies that ident itself must be a pointer type, the sentence is incorrect, because ident in this case is an array.
Instead, the intended meaning of the sentence is clarification - it specifies that qualification is applied to the pointer, aligining with both user17074451's answer and the OP's own analysis. The clarification is essential because the previous sentence is lengthy and might be challenging for some readers, including my self, to fully grasp.
Example: int * const * foo
(OP's Example).
Now, let's analyze the example brought up by the OP:
T D2 : int * const * foo
T: int
D2: * const * foo
D1: * foo
type-qualifier-list: const
derived-declarator-type list: derived from T D1
for ident, which is "pointer to".
ident type: pointer to const
pointer to int.
clarification: the pointer to int is const
-qualified.
When I first read the question, I agreed with the OP's point. However, after discovering that current C standard had augmented the clarification regarding newly introduced attribute, I realized there must be a reason for the clarification.