2 // Check that range-based for loop calls destructors
4 // { dg-do run { target c++11 } }
5 extern "C" void abort();
7 int value_counter = 0, it_counter = 0, seq_counter = 0;
36 iterator(const iterator &o)
45 iterator &operator ++() { ++x; return *this; }
46 int operator *() { return x; }
47 bool operator != (const iterator &o) { return x != o.x; }
53 container(int a, int b) :min(a), max(b)
57 container(const container &) = delete;
64 iterator begin(container &c)
66 return iterator(c.min);
69 iterator end(container &c)
71 return iterator(c.max + 1);
76 for (Int x : container(0, 10))
78 if (value_counter != 1) abort();
79 if (it_counter != 2) abort();
80 if (seq_counter != 1) abort();
82 if (value_counter != 0) abort();
83 if (it_counter != 0) abort();
84 if (seq_counter != 0) abort();
88 for (Int x : container(0, 10))
90 if (value_counter != 1) abort();
91 if (it_counter != 2) abort();
92 if (seq_counter != 1) abort();
94 if (value_counter != 0) abort();
95 if (it_counter != 0) abort();
96 if (seq_counter != 0) abort();
98 for (Int x : container(0, 10))
100 if (value_counter != 1) abort();
101 if (it_counter != 2) abort();
102 if (seq_counter != 1) abort();
110 if (value_counter != 0) abort();
111 if (it_counter != 0) abort();
112 if (seq_counter != 0) abort();