-
c
is the name of a variable; -
(c)
is an expression, in this case an lvalue expression, whose value is identical to the value of the variablec
.
And the two are treated differently by decltype
. Consider, for example, decltype(1+2)
, which is also an example taking an expression. It just so happens that your example is a simple version of an expression: one which merely names a single variable and does nothing exciting with it.
It’s one of those differences that you generally only really care about if you’re rationalising about the subtle parts of the language specification; though, as you have identified, it has quite a significant practical effect in this case.
Please note though that there is no operator usage here. It’s all simply a deduction from the layout of the grammar.