http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58714
Bug ID: 58714
Summary: Bogus value category in ternary operator?
Product: gcc
Version: 4.8.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ali.baharev at gmail dot com
struct X {
X& operator=(const X&) = delete;
X& operator=(X&& ) = default;
};
void f(bool t) {
X a, b;
*(t ? &a : &b) = X();
(t ? a : b) = X();
}
-----
The line:
(t ? a : b) = X();
gives:
error: use of deleted function ‘X& X::operator=(const X&)’
The code compiles with clang++ 3.4.
The sections in the Standard relevant here are: [expr.cond]/4 "If the second
and third operands [of the conditional operator] are glvalues of the same value
category and have the same type, the result is of that type and value category"
(text in brackets inserted for clarity).
This code was posted at stackoverflow.com/q/19341908/341970