#include <iostream>
#include <algorithm>
struct nur_zum_testen_t {} nur_zum_testen;
template <typename T>
class List {
T * items;
int size, capacity;
public:
List(const List& list);
~List() { delete[] items; }
List(nur_zum_testen_t, T *items, int size, int capacity)
: items(items), size(size), capacity(capacity) {}
};
template <class T>
List<T>::List(const List& list) :
capacity(list.capacity),
items(new T[list.capacity]),
size(list.size)
{
try
{
std::copy( list.items, list.items + size, items );
}
catch(...)
{
delete [] items;
throw;
}
}
int instances;
struct doofsinn {
doofsinn() { ++instances; }
~doofsinn() { --instances; }
doofsinn& operator=(doofsinn const&) {
static int doofsinn_counter = 0;
if (++doofsinn_counter % 5 == 0)
throw "Sone";
}
};
int main()
{
{
List<doofsinn> l(nur_zum_testen, new doofsinn[10] (), 10, 10);
try { List<doofsinn> l2(l); } catch(...) {}
}
std::cout << instances << " instances still out there ...\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgogCnN0cnVjdCBudXJfenVtX3Rlc3Rlbl90IHt9IG51cl96dW1fdGVzdGVuOwogCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBMaXN0IHsKICBUICogaXRlbXM7CiAgaW50IHNpemUsIGNhcGFjaXR5OwogcHVibGljOgogIExpc3QoY29uc3QgTGlzdCYgbGlzdCk7CiB+TGlzdCgpIHsgZGVsZXRlW10gaXRlbXM7IH0KIAogIExpc3QobnVyX3p1bV90ZXN0ZW5fdCwgVCAqaXRlbXMsIGludCBzaXplLCBpbnQgY2FwYWNpdHkpCiAgICA6IGl0ZW1zKGl0ZW1zKSwgc2l6ZShzaXplKSwgY2FwYWNpdHkoY2FwYWNpdHkpIHt9Cn07CiAKdGVtcGxhdGUgPGNsYXNzIFQ+IApMaXN0PFQ+OjpMaXN0KGNvbnN0IExpc3QmIGxpc3QpIDogCiAgICBjYXBhY2l0eShsaXN0LmNhcGFjaXR5KSwgCiAgICBpdGVtcyhuZXcgVFtsaXN0LmNhcGFjaXR5XSksIAogICAgc2l6ZShsaXN0LnNpemUpCnsgCiAgICB0cnkKICAgIHsKICAgICAgICBzdGQ6OmNvcHkoIGxpc3QuaXRlbXMsIGxpc3QuaXRlbXMgKyBzaXplLCBpdGVtcyApOyAKICAgIH0KICAgIGNhdGNoKC4uLikKICAgIHsKICAgICAgICBkZWxldGUgW10gaXRlbXM7CiAgICAgICAgdGhyb3c7CiAgICB9Cn0KIAppbnQgaW5zdGFuY2VzOwpzdHJ1Y3QgZG9vZnNpbm4gewogIGRvb2ZzaW5uKCkgeyArK2luc3RhbmNlczsgfQogIH5kb29mc2lubigpIHsgLS1pbnN0YW5jZXM7IH0KICBkb29mc2lubiYgb3BlcmF0b3I9KGRvb2ZzaW5uIGNvbnN0JikgewogICAgc3RhdGljIGludCBkb29mc2lubl9jb3VudGVyID0gMDsKICAgIGlmICgrK2Rvb2ZzaW5uX2NvdW50ZXIgJSA1ID09IDApCiAgICAgIHRocm93ICJTb25lIjsKICB9Cn07CiAKaW50IG1haW4oKQp7CiAgewogICAgTGlzdDxkb29mc2lubj4gbChudXJfenVtX3Rlc3RlbiwgbmV3IGRvb2ZzaW5uWzEwXSAoKSwgMTAsIDEwKTsKICAgIHRyeSB7IExpc3Q8ZG9vZnNpbm4+IGwyKGwpOyB9IGNhdGNoKC4uLikge30KICB9CiAgc3RkOjpjb3V0IDw8IGluc3RhbmNlcyA8PCAiIGluc3RhbmNlcyBzdGlsbCBvdXQgdGhlcmUgLi4uXG4iOwp9Cg==