2 // Check that range-based for loop calls destructors
4 // { dg-options "-std=c++0x" }
6 extern "C" void abort();
8 int value_counter = 0, it_counter = 0, seq_counter = 0;
37 iterator(const iterator &o)
46 iterator &operator ++() { ++x; return *this; }
47 int operator *() { return x; }
48 bool operator != (const iterator &o) { return x != o.x; }
54 container(int a, int b) :min(a), max(b)
58 container(const container &) = delete;
65 iterator begin(container &c)
67 return iterator(c.min);
70 iterator end(container &c)
72 return iterator(c.max + 1);
77 for (Int x : container(0, 10))
79 if (value_counter != 1) abort();
80 if (it_counter != 2) abort();
81 if (seq_counter != 1) abort();
83 if (value_counter != 0) abort();
84 if (it_counter != 0) abort();
85 if (seq_counter != 0) abort();
89 for (Int x : container(0, 10))
91 if (value_counter != 1) abort();
92 if (it_counter != 2) abort();
93 if (seq_counter != 1) abort();
95 if (value_counter != 0) abort();
96 if (it_counter != 0) abort();
97 if (seq_counter != 0) abort();
99 for (Int x : container(0, 10))
101 if (value_counter != 1) abort();
102 if (it_counter != 2) abort();
103 if (seq_counter != 1) abort();
111 if (value_counter != 0) abort();
112 if (it_counter != 0) abort();
113 if (seq_counter != 0) abort();