https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85867
Bug ID: 85867 Summary: Subscript operator applied to an temporary array results in an lvalue Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: yaghmour.shafik at gmail dot com Target Milestone: --- This Stackoverflow question https://stackoverflow.com/q/33161003/1708801 provides the following code: using Y = int[10]; int main() { (Y { })[0] = 1; } which compiles without diagnostic, CWG defect report 1213: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1213 says the result of the subscript operator should be an xvalue and therefore not assignable to. Also see the following clang bug report on the same issue, which was resolved at the end of 2017: https://bugs.llvm.org/show_bug.cgi?id=25357 I have a godbolt for it here: https://godbolt.org/g/AmzbFh We can see that clang no longer allows this but gcc does.