【发布时间】:2015-10-16 01:14:23
【问题描述】:
这个程序格式不正确:
struct X { int i; };
int main() {
(X { }).i = 1;
}
i,临时X { } 的子对象,不能用作左值,因为X { } 是右值。
但是,这可以使用 GCC 5.2.1 和 -Wall 静默编译:
using Y = int[10];
int main() {
(Y { })[0] = 1;
}
如果编译器是正确的,那么这一次,(Y { })的第0个元素,也就是(Y { })的子对象,可以被当作左值处理。
我的问题是:
- 第二个程序格式不正确吗?
- 为什么(不),即使两个程序似乎都将临时对象的子对象视为左值?
【问题讨论】:
-
Clang 错误是 resolved in 4.0
标签: c++ c++11 language-lawyer c++14