#include <iostream>
#include <thread>
struct Test
{
Test( int x_) : x ( x_)
{ std:: cout << "constructor Test ( " << x << " )" << std:: endl ; }
~Test( )
{ std:: cout << "destructor Test ( " << x << " )" << std:: endl ; }
int x ;
} ;
void bar ( )
{
std:: cout << "begin bar()" << std:: endl ;
thread_local Test obj ( 1 ) ;
std:: cout << "end bar()" << std:: endl ;
}
void foo ( )
{
std:: cout << "begin foo()" << std:: endl ;
static Test obj ( 0 ) ;
bar( ) ;
std:: cout << "end foo()" << std:: endl ;
}
int main( )
{
std:: cout << "begin main()" << std:: endl ;
foo( ) ;
std:: cout << "end main()" << std:: endl ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgoKCnN0cnVjdCBUZXN0CnsKICAgIFRlc3QoaW50IHhfKSA6IHggKCB4XykKICAgIHsgc3RkOjpjb3V0IDw8ICJjb25zdHJ1Y3RvciBUZXN0ICggIiA8PCB4IDw8ICIgKSIgPDwgc3RkOjplbmRsIDsgIH0KICAgIH5UZXN0KCkKICAgIHsgc3RkOjpjb3V0IDw8ICJkZXN0cnVjdG9yIFRlc3QgKCAiIDw8IHggPDwgIiApIiA8PCBzdGQ6OmVuZGwgOyAgfQogICAgaW50IHggOwp9IDsKCgp2b2lkIGJhciAoKQp7CiAgICBzdGQ6OmNvdXQgPDwgImJlZ2luIGJhcigpIiA8PCBzdGQ6OmVuZGwgOwogICAgdGhyZWFkX2xvY2FsIFRlc3Qgb2JqICggMSApIDsKICAgIHN0ZDo6Y291dCA8PCAiZW5kIGJhcigpIiA8PCBzdGQ6OmVuZGwgOwp9Cgp2b2lkIGZvbyAoKQp7CiAgICBzdGQ6OmNvdXQgPDwgImJlZ2luIGZvbygpIiA8PCBzdGQ6OmVuZGwgOwogICAgc3RhdGljIFRlc3Qgb2JqICggMCApIDsKICAgIGJhcigpIDsKICAgIHN0ZDo6Y291dCA8PCAiZW5kIGZvbygpIiA8PCBzdGQ6OmVuZGwgOwp9CgoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgImJlZ2luIG1haW4oKSIgPDwgc3RkOjplbmRsIDsKICAgIGZvbygpIDsKICAgIHN0ZDo6Y291dCA8PCAiZW5kIG1haW4oKSIgPDwgc3RkOjplbmRsIDsKfQo=