What is the rationale behind decltype behavior?

前端 未结 3 1682
清酒与你
清酒与你 2020-12-24 05:04

As I understood in C++11 decltype(expression) is used to deduce the exact same type of the given expression. But when the expression is put into parentheses its

3条回答
  •  死守一世寂寞
    2020-12-24 05:21

    From one of the authors of the decltype proposal, J. Jarvi:

    It’s been a while, but here’s what I (think I) remember:

    Two separate keywords for differentiating these two kinds of semantics was never considered. (Introducing new keywords is not done lightly).

    As to the change of the semantics of decltype((x)), discussion in the core working group converged to treating (x) as an expression, rather than an identifier, which perhaps is more “internally consistent” with the language rules.

    People were aware that this could potentially be confusing in some cases, but the consensus (while perhaps not everyone’s preference) was eventually to be consistent with the standard’s prior definition of what is an identifier and what is an expression.

    The example you link to [this question's example] is indeed surprising. At the time, deducing a function’s return type from its return expression using decltype(auto) was not yet part of the language, so I don’t think this particular use case was on anyone’s radar.

提交回复
热议问题