[Bug c++/84516] bitfield temporaries > 32-bits have wrong type
gnu at mllr dot cc
gcc-bugzilla@gcc.gnu.org
Thu Feb 22 16:11:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84516
--- Comment #1 from Greg Miller <gnu at mllr dot cc> ---
The issue is not related to iostream. So, here's perhaps a simpler reproduction
example that may focus more on the issue at hand.
Link: https://godbolt.org/g/vA2rPN
struct A {
long x : 32;
long y : 33;
};
void F(int) {}
void F(long) {}
template <typename T>
void F(T) = delete;
int main() {
A a;
F(a.x); // Calls F(long)
F(+a.x); // Calls F(int)
F(a.y); // Calls F(long)
F(+a.y); // error: use of deleted function 'void F(T) [with T = long
int:33]'
}
Here we can see that the type of the expression `+a.y` is `long int:33`, which
I suspect is a problem. I think the type of that expression should be `long
int`.
More information about the Gcc-bugs
mailing list