#include <iostream>
#include <cassert>
class Printer {
static int count;
public :
static Printer* create( ) {
return ( count == 0 ) ? ++ count, new Printer : 0 ;
}
~Printer( ) { -- count; }
private :
Printer( ) { }
Printer( const 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+UHJpbnRlcigpIHstLWNvdW50O30KcHJpdmF0ZToKICAgIFByaW50ZXIoKSB7fQogICAgUHJpbnRlcihjb25zdCBQcmludGVyJik7CnB1YmxpYzoKICAgICAgdm9pZCBwcmludCgpIHtzdGQ6OmNvdXQ8PCJJIGFtIGEgcHJpbnRlciI8PHN0ZDo6ZW5kbDt9Cn07CgppbnQgUHJpbnRlcjo6Y291bnQgPSAwOwoKaW50IG1haW4oKSB7CiAgICBQcmludGVyKiBwMSA9IFByaW50ZXI6OmNyZWF0ZSgpOwogICAgYXNzZXJ0KHAxKTsKICAgIFByaW50ZXIqIHAyID0gUHJpbnRlcjo6Y3JlYXRlKCk7CiAgICBhc3NlcnQoIXAyKTsKICAgIGRlbGV0ZSBwMTsKICAgIFByaW50ZXIqIHAzID0gUHJpbnRlcjo6Y3JlYXRlKCk7CiAgICBhc3NlcnQocDMpOwogICAgcDMtPnByaW50KCk7CiAgICBQcmludGVyIHA0KCpwMyk7CiAgICBkZWxldGUgcDM7Cn0K