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()14 int 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