1 // Test for range-based for loop
2 // Test the loop with a custom iterator
3 // with begin/end in std
4 
5 // { dg-do compile { target c++11 } }
6 
7 struct iterator
8 {
9     int x;
iteratoriterator10     explicit iterator(int v) :x(v) {}
11     iterator &operator ++() { ++x; return *this; }
12     int operator *() { return x; }
13     bool operator != (const iterator &o) { return x != o.x; }
14 };
15 
16 struct container
17 {
18     int min, max;
containercontainer19     container(int a, int b) :min(a), max(b) {}
20 };
21 
22 namespace std
23 {
begin(container & c)24     iterator begin(container &c)
25     {
26         return iterator(c.min);
27     }
28 
end(container & c)29     iterator end(container &c)
30     {
31         return iterator(c.max + 1);
32     }
33 }
34 
main()35 int main()
36 {
37     container c(1,4);
38     for (int it : c)    // { dg-error "was not declared" }
39     {
40     }
41 }
42