[C++11: 5.2.3/1]:
A simple-type-specifier (7.1.6.2) or typename-specifier (14.6) followed by a parenthesized expression-list constructs a value of the specified type given the expression list. [..]
Examining the grammar, we see that the only way to get unsigned char
from the simple-type-specifier production is by concatenating two of them.
As evidence debunking the rumour that table 10 is stating the contrary, which I may myself have started a short while ago (:P), the table heading says "specifier(s)" (note the optional plural), and refer to the below passage:
[C++11: 5.2.3/2]:
[..] Table 10 summarizes the valid combinations of simple-type-specifiers and the types they specify. (emphasis mine)
Now, combining simple-type-specifiers is allowed in some cases:
[C++11: 7.1.6.2/3]:
When multiple simple-type-specifiers are allowed, they can be freely intermixed with other decl-specifiers in any order. [..]
… but there's no indication that this is the case with functional notation, which clearly states "a simple-type-specifier" — singular.
Therefore GCC is correct, and Visual Studio is wrong.
As for why this is the case... well, I don't know. I suspect we could come up with some ambiguous edge case, but Casey makes a good point in the comments below that allowing this would be inconsistent with function call syntax, since names of functions cannot have spaces in them.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…