[Bug c++/88103] [7/8/9 Regression] Wrong value category when conditional expression result is used as object expression
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Nov 27 19:21:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88103
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |glisse at gcc dot gnu.org,
| |jakub at gcc dot gnu.org
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Isn't that just because we've actually folded the true ? x : y expressions to x
before handling it?
If I tweak the testcase (below, so that it can't be folded), it started FAILing
with r200821.
struct A {
A(int);
A&& foo() && ;
int i;
};
void free(A&&);
void test_xvalue(A a, bool b, A c){
//No error
A&& ref = b? static_cast<A&&>(a) : static_cast<A&&>(c);
//No error
free(b? static_cast<A&&>(a) : static_cast<A&&>(c));
//Unexpected error: passing A as this discard qualifier
(b? static_cast<A&&>(a) : static_cast<A&&>(c)).foo();
//Unexpected error: error cannot bind rvalue reference
// of type int&& to lvalue of type int
int&& k=(b? static_cast<A&&>(a) : static_cast<A&&>(c)).i;
}
void test_prvalue(A a, bool b){
//No error
A&& ref = b? static_cast<A&&>(a) : 1;
//No error
free(b? static_cast<A&&>(a) : 1);
//No error
(b? static_cast<A&&>(a) : 1).foo();
//No error
int&& k=(b? static_cast<A&&>(a) : 1).i;
}
More information about the Gcc-bugs
mailing list