#include <memory>
#include <string>
#include <iostream>
using namespace std;
static size_t indent = 0 ;
struct Base
{
int value;
Base( int value) : value( value) { }
~Base( ) {
cout << string( indent* 2 , ' ' ) << "base destructor for " << value << endl;
-- indent;
}
} ;
struct Node : public Base
{
std:: unique_ptr < Node> next;
Node( int value, Node* next) : Base( value) , next( next) { }
~Node( )
{
++ indent;
cout << string( indent* 2 , ' ' ) << "started destruction of " << value << endl;
}
} ;
int main( )
{
Node* node = new Node( 0 , nullptr) ;
for ( int i = 1 ; i <= 5 ; ++ i)
node = new Node( i, node) ;
delete node;
return 0 ;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0YXRpYyBzaXplX3QgaW5kZW50ID0gMDsKCnN0cnVjdCBCYXNlCnsKICBpbnQgdmFsdWU7CiAgCiAgQmFzZShpbnQgdmFsdWUpIDogdmFsdWUodmFsdWUpIHsgfQogIH5CYXNlKCkgewogICAgY291dCA8PCBzdHJpbmcoaW5kZW50KjIsICcgJykgPDwgImJhc2UgZGVzdHJ1Y3RvciBmb3IgIiA8PCB2YWx1ZSA8PCBlbmRsOwogICAgLS1pbmRlbnQ7CiAgfQp9OwoKc3RydWN0IE5vZGUgOiBwdWJsaWMgQmFzZQp7CiAgc3RkOjp1bmlxdWVfcHRyPE5vZGU+IG5leHQ7CiAgCiAgTm9kZShpbnQgdmFsdWUsIE5vZGUqIG5leHQpIDogQmFzZSh2YWx1ZSksIG5leHQobmV4dCkgeyB9CiAgCiAgfk5vZGUoKQogIHsKICAgICsraW5kZW50OwogICAgY291dCA8PCBzdHJpbmcoaW5kZW50KjIsICcgJykgPDwgInN0YXJ0ZWQgZGVzdHJ1Y3Rpb24gb2YgIiA8PCB2YWx1ZSA8PCBlbmRsOwogIH0KfTsKCmludCBtYWluKCkKewogIE5vZGUqIG5vZGUgPSBuZXcgTm9kZSgwLCBudWxscHRyKTsKICBmb3IgKGludCBpID0gMTsgaSA8PSA1OyArK2kpCiAgICBub2RlID0gbmV3IE5vZGUoaSwgbm9kZSk7CiAgCiAgZGVsZXRlIG5vZGU7CiAgCiAgcmV0dXJuIDA7Cn0=