int main() { using It = forward_iterator<Counted*>; const int N = 5; alignas(Counted) char pool[sizeof(Counted)*N] = {}; Counted* p = (Counted*)pool; std::uninitialized_fill(p, p+N, Counted()); assert(Counted::count == 5); std::destroy(p, p+1); p += 1; assert(Counted::count == 4); std::destroy(It(p), It(p + 4)); assert(Counted::count == 0); }
int main(int, char**) { using It = forward_iterator<Counted*>; const int N = 5; alignas(Counted) char pool[sizeof(Counted)*N] = {}; Counted* p = (Counted*)pool; std::uninitialized_fill(p, p+N, Counted()); assert(Counted::count == 5); Counted* np = std::destroy_n(p, 1); assert(np == p+1); assert(Counted::count == 4); p += 1; It it = std::destroy_n(It(p), 4); assert(it == It(p+4)); assert(Counted::count == 0); return 0; }