Le sujet a été discuté auparavant , mais ce n'est pas un doublon.
Lorsque quelqu'un demande la différence entre decltype(a)et decltype((a)), la réponse habituelle est - aest une variable, (a)est une expression. Je trouve cette réponse insatisfaisante.
Tout d'abord, ac'est aussi une expression. Les options pour une expression primaire incluent, entre autres -
- ( expression )
- id-expression
Plus important encore, le phrasé pour decltype considère les parenthèses très, très explicitement :
For an expression e, the type denoted by decltype(e) is defined as follows:
(1.1) if e is an unparenthesized id-expression naming a structured binding, ...
(1.2) otherwise, if e is an unparenthesized id-expression naming a non-type template-parameter, ...
(1.3) otherwise, if e is an unparenthesized id-expression or an unparenthesized class member access, ...
(1.4) otherwise, ...
La question demeure donc. Pourquoi les parenthèses sont - elles traitées différemment? Quelqu'un connaît-il les documents techniques ou les discussions en comité qui se cachent derrière? La considération explicite des parenthèses conduit à penser que ce n'est pas un oubli, donc il doit y avoir une raison technique qui me manque.
(a)est une expression, etaest une expression et une variable".