| // PR c++/107624 |
| // { dg-do run { target c++11 } } |
| // { dg-options "" } |
| |
| int n[3]; |
| struct S { |
| static void operator() (int x) { n[0] |= (1 << x); } // { dg-warning "may be a static member function only with" "" { target c++20_down } } |
| static void baz (int x) { n[1] |= (1 << x); } |
| int s; |
| }; |
| volatile S s[2]; |
| |
| S & |
| foo (int x) |
| { |
| static S t; |
| n[2] |= (1 << x); |
| return t; |
| } |
| |
| int |
| main () |
| { |
| int i = 0; |
| foo (0) (0); |
| if (n[0] != 1 || n[1] || n[2] != 1) |
| __builtin_abort (); |
| foo (1).baz (1); |
| if (n[0] != 1 || n[1] != 2 || n[2] != 3) |
| __builtin_abort (); |
| s[i++] (2); |
| if (i != 1 || n[0] != 5 || n[1] != 2 || n[2] != 3) |
| __builtin_abort (); |
| s[--i].baz (3); |
| if (i != 0 || n[0] != 5 || n[1] != 10 || n[2] != 3) |
| __builtin_abort (); |
| } |