1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <memory>
// template <class ForwardIt, class Size>
// ForwardIt destroy_n(ForwardIt, Size s);
#include <memory>
#include <cstdlib>
#include <cassert>
#include "test_macros.h"
#include "test_iterators.h"
struct Counted {
static int count;
static void reset() { count = 0; }
Counted() { ++count; }
Counted(Counted const&) { ++count; }
~Counted() { --count; }
friend void operator&(Counted) = delete;
};
int Counted::count = 0;
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);
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);
}
|