// P0184R0: Generalizing the Range-Based For Loop | |
// { dg-do compile { target c++17 } } | |
struct A { | |
int ar[4]; | |
int *begin() { return ar; } | |
struct end_t { | |
int *p; | |
friend bool operator!= (int *p, end_t e) { return p != e.p; } | |
}; | |
end_t end() { return { &ar[4] }; } | |
}; | |
int main() | |
{ | |
A a { 1, 2, 3, 4 }; | |
int i = 1; | |
for (auto x: a) | |
if (x != i++) | |
__builtin_abort (); | |
if (i != 5) | |
__builtin_abort (); | |
} |