- #include <iostream> 
- #include <functional> 
-   
- class Bang 
- { 
- public: 
- 	Bang(int i = 0) : m_val(i) 
- 	{ 
- 		m_foo = [bang = *this] { std::cout << bang.m_val << std::endl; }; 
- 	} 
-   
- 	~Bang() 
- 	{ 
- 		m_val = -1; 
- 	} 
-   
- 	void Foo() 
- 	{ 
- 		m_foo(); 
- 	} 
- private: 
- 	int m_val; 
- 	std::function<void()> m_foo; 
- }; 
-   
- Bang GetBang() 
- { 
- 	return Bang(100500); 
- } 
-   
- int main() 
- { 
- 	Bang b; 
- 	b = GetBang(); 
- 	b.Foo(); 
- 	return 0; 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEJhbmcKewpwdWJsaWM6CglCYW5nKGludCBpID0gMCkgOiBtX3ZhbChpKQoJewoJCW1fZm9vID0gW2JhbmcgPSAqdGhpc10geyBzdGQ6OmNvdXQgPDwgYmFuZy5tX3ZhbCA8PCBzdGQ6OmVuZGw7IH07Cgl9CgoJfkJhbmcoKQoJewoJCW1fdmFsID0gLTE7Cgl9CgoJdm9pZCBGb28oKQoJewoJCW1fZm9vKCk7Cgl9CnByaXZhdGU6CglpbnQgbV92YWw7CglzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbV9mb287Cn07CgpCYW5nIEdldEJhbmcoKQp7CglyZXR1cm4gQmFuZygxMDA1MDApOwp9CgppbnQgbWFpbigpCnsKCUJhbmcgYjsKCWIgPSBHZXRCYW5nKCk7CgliLkZvbygpOwoJcmV0dXJuIDA7Cn0K