[C++11: 7.1.6.2/4]:表示的类型decltype(e)定义如下:
- if
e是不带括号的id 表达式或不带括号的类成员访问 (5.2.5),decltype(e)是由 命名的实体的类型e。如果没有这样的实体,或者如果e命名了一组重载函数,则程序是非良构的;- 否则,如果
e是一个 xvalue,decltype(e)是T&&,其中T的类型是e;- 否则,如果
e是左值,decltype(e)是T&,其中T的类型是e;- 否则,
decltype(e)是 的类型e。说明符的操作数
decltype是未计算的操作数(第 5 条)。
第二种、第三种和第四种情况清楚地涉及表达式的类型,其中不包括任何多态性考虑。
但是,我不完全确定这里的“实体”是什么意思,第一种情况似乎是命名表达式引用的对象e。对于“实体的类型”是指它的运行时类型还是它的静态类型对我来说是模棱两可的。