Этой программа плохо образованно:Использования временного массива в качестве именующего
struct X { int i; };
int main() {
(X { }).i = 1;
}
i
, субобъект временного X { }
, не может быть использован в качестве именующего, потому что X { }
является Rvalue.
Однако, это молча компилирует с GCC 5.2.1 и -Wall
:
using Y = int[10];
int main() {
(Y { })[0] = 1;
}
Если компилятор правильно, то это время, нулевой элемент (Y { })
, который является подобъектом (Y { })
, можно лечить как lvalue.
Мои вопросы:
- ли плохо формируется вторая программа?
- Почему (нет), хотя обе программы, похоже, рассматривают подобъект временного значения как lvalue?
Ошибка Clang была [разрешена в 4.0] (https://bugs.llvm.org/show_bug.cgi?id=25357) –