#include <iostream>
#include <string>
class String_counter
{
public:
String_counter()
{
value_ = prefix_ + std::to_string(++counter_);
}
~String_counter()
{
value_ = prefix_ + std::to_string(--counter_);
}
static const std::string& value() { return value_; }
private:
static int counter_;
static const std::string prefix_;
static std::string value_;
};
int String_counter::counter_ = 0;
const std::string String_counter::prefix_ = "s";
std::string String_counter::value_ = prefix_ + std::to_string(counter_);
int main()
{
std::cout << String_counter::value() << std::endl;
{
String_counter c1;
std::cout << String_counter::value() << std::endl;
{
String_counter c2;
std::cout << String_counter::value() << std::endl;
}
std::cout << String_counter::value() << std::endl;
}
std::cout << String_counter::value() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgU3RyaW5nX2NvdW50ZXIKewpwdWJsaWM6CiAgICBTdHJpbmdfY291bnRlcigpCiAgICB7CiAgICAgICAgdmFsdWVfID0gcHJlZml4XyArIHN0ZDo6dG9fc3RyaW5nKCsrY291bnRlcl8pOwogICAgfQogICAgflN0cmluZ19jb3VudGVyKCkKICAgIHsKICAgICAgICB2YWx1ZV8gPSBwcmVmaXhfICsgc3RkOjp0b19zdHJpbmcoLS1jb3VudGVyXyk7CiAgICB9CiAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKCkgeyByZXR1cm4gdmFsdWVfOyB9CnByaXZhdGU6CiAgICBzdGF0aWMgaW50IGNvdW50ZXJfOwogICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByZWZpeF87CiAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdmFsdWVfOwp9OwoKaW50IFN0cmluZ19jb3VudGVyOjpjb3VudGVyXyA9IDA7CmNvbnN0IHN0ZDo6c3RyaW5nIFN0cmluZ19jb3VudGVyOjpwcmVmaXhfID0gInMiOwpzdGQ6OnN0cmluZyBTdHJpbmdfY291bnRlcjo6dmFsdWVfID0gcHJlZml4XyArIHN0ZDo6dG9fc3RyaW5nKGNvdW50ZXJfKTsKCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8IFN0cmluZ19jb3VudGVyOjp2YWx1ZSgpIDw8IHN0ZDo6ZW5kbDsKICAgIHsKICAgICAgICBTdHJpbmdfY291bnRlciBjMTsKICAgICAgICBzdGQ6OmNvdXQgPDwgU3RyaW5nX2NvdW50ZXI6OnZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgICAgIHsKICAgICAgICAgICAgU3RyaW5nX2NvdW50ZXIgYzI7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBTdHJpbmdfY291bnRlcjo6dmFsdWUoKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgfQogICAgICAgIHN0ZDo6Y291dCA8PCBTdHJpbmdfY291bnRlcjo6dmFsdWUoKSA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgU3RyaW5nX2NvdW50ZXI6OnZhbHVlKCkgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0K