"names which are not lvalues" 是什么?

What are "names which are not lvalues"?

Effective Modern C++errata 中有一个条目说

not all names are lvalues

这些名字是什么?具体来说,

  1. Scott 是指 nullptrthis 命名的纯右值吗?
  2. 还有其他的吗?
  3. 如果对 1 的回答是,那么 nullptr 相对于 truefalse 的特殊之处是什么?它们都是某种类型的值(true/false 类型 boolnullptr 类型 std::nullptr_t)。毕竟 true 保留为 bool 就像 1 保留为 int 一样,并且 1 不是“不是左值的名称”,是吗?此时我会问 为什么 true 不是名字?

表达式 X 其中 X 是枚举器的名称(例如声明为 enum E { X };)具有 rvalue 值类别。


与非类型模板参数类似(向@PasserBy 致敬),如

template <int X>
int f() { return X; /* X is an rvalue */}