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`.