- #include <iostream> 
- #include <mutex> 
-   
- class Foo 
- { 
- public: 
-     Foo() : _i(NULL) {} 
-     int get() 
-     { 
-         std::call_once(_flag, 
-                        [&]() 
-                        { 
-                            std::cout << "Setting _i\n"; 
-                            _i = new int(5); 
-                        }); 
-         return *_i; 
-     } 
-     Foo(const Foo&) = delete; 
-     Foo& operator=(const Foo&) = delete; 
- private: 
-     std::once_flag _flag; 
-     int* _i; 
- }; 
-   
- int main() 
- { 
-     Foo f; 
-   
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     std::cout << f.get() << "\n"; 
-     return 0; 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bXV0ZXg+CgpjbGFzcyBGb28KewpwdWJsaWM6CiAgICBGb28oKSA6IF9pKE5VTEwpIHt9CiAgICBpbnQgZ2V0KCkKICAgIHsKICAgICAgICBzdGQ6OmNhbGxfb25jZShfZmxhZywKICAgICAgICAgICAgICAgICAgICAgICBbJl0oKQogICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJTZXR0aW5nIF9pXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICBfaSA9IG5ldyBpbnQoNSk7CiAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuICpfaTsKICAgIH0KICAgIEZvbyhjb25zdCBGb28mKSA9IGRlbGV0ZTsKICAgIEZvbyYgb3BlcmF0b3I9KGNvbnN0IEZvbyYpID0gZGVsZXRlOwpwcml2YXRlOgogICAgc3RkOjpvbmNlX2ZsYWcgX2ZsYWc7CiAgICBpbnQqIF9pOwp9OwoKaW50IG1haW4oKQp7CiAgICBGb28gZjsKCiAgICBzdGQ6OmNvdXQgPDwgZi5nZXQoKSA8PCAiXG4iOwogICAgc3RkOjpjb3V0IDw8IGYuZ2V0KCkgPDwgIlxuIjsKICAgIHN0ZDo6Y291dCA8PCBmLmdldCgpIDw8ICJcbiI7CiAgICBzdGQ6OmNvdXQgPDwgZi5nZXQoKSA8PCAiXG4iOwogICAgc3RkOjpjb3V0IDw8IGYuZ2V0KCkgPDwgIlxuIjsKICAgIHN0ZDo6Y291dCA8PCBmLmdldCgpIDw8ICJcbiI7CiAgICBzdGQ6OmNvdXQgPDwgZi5nZXQoKSA8PCAiXG4iOwogICAgc3RkOjpjb3V0IDw8IGYuZ2V0KCkgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Cg==