#include <iostream>
#include <cassert>
class Printer {
static int count;
public:
static Printer* create() {
return (count == 0) ? ++count, new Printer : 0;
}
~Printer() {--count;}
private:
Printer() {}
public:
void print() {std::cout<<"I am a printer"<<std::endl;}
};
int Printer::count = 0;
int main() {
Printer* p1 = Printer::create();
assert(p1);
Printer* p2 = Printer::create();
assert(!p2);
delete p1;
Printer* p3 = Printer::create();
assert(p3);
p3->print();
Printer p4(*p3);
delete p3;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KY2xhc3MgUHJpbnRlciB7CiAgICBzdGF0aWMgaW50IGNvdW50OwpwdWJsaWM6CiAgICBzdGF0aWMgUHJpbnRlciogY3JlYXRlKCkgewogICAgICAgIHJldHVybiAoY291bnQgPT0gMCkgPyArK2NvdW50LCBuZXcgUHJpbnRlciA6IDA7CiAgICB9CiAgICB+UHJpbnRlcigpIHstLWNvdW50O30KcHJpdmF0ZToKICAgIFByaW50ZXIoKSB7fQpwdWJsaWM6CiAgICAgIHZvaWQgcHJpbnQoKSB7c3RkOjpjb3V0PDwiSSBhbSBhIHByaW50ZXIiPDxzdGQ6OmVuZGw7fQp9OwoKaW50IFByaW50ZXI6OmNvdW50ID0gMDsKCmludCBtYWluKCkgewogICAgUHJpbnRlciogcDEgPSBQcmludGVyOjpjcmVhdGUoKTsKICAgIGFzc2VydChwMSk7CiAgICBQcmludGVyKiBwMiA9IFByaW50ZXI6OmNyZWF0ZSgpOwogICAgYXNzZXJ0KCFwMik7CiAgICBkZWxldGUgcDE7CiAgICBQcmludGVyKiBwMyA9IFByaW50ZXI6OmNyZWF0ZSgpOwogICAgYXNzZXJ0KHAzKTsKICAgIHAzLT5wcmludCgpOwogICAgUHJpbnRlciBwNCgqcDMpOwogICAgZGVsZXRlIHAzOwp9Cg==