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

Reply via email to