1 // P0184R0: Generalizing the Range-Based For Loop 2 // { dg-do compile { target c++17 } } 3 4 struct A { 5 int ar[4]; beginA6 int *begin() { return ar; } 7 struct end_t { 8 int *p; 9 friend bool operator!= (int *p, end_t e) { return p != e.p; } 10 }; endA11 end_t end() { return { &ar[4] }; } 12 }; 13 main()14int main() 15 { 16 A a { 1, 2, 3, 4 }; 17 int i = 1; 18 for (auto x: a) 19 if (x != i++) 20 __builtin_abort (); 21 if (i != 5) 22 __builtin_abort (); 23 } 24