- #include <iostream> 
- #include <memory> 
-   
- struct LoggerInterface {};  
-   
- std::shared_ptr<LoggerInterface> pi = std::make_shared<LoggerInterface>();  
-   
- struct B { 
- 	virtual void foo(int blablabla, std::shared_ptr<LoggerInterface> logger = nullptr) = 0; 
- }; 
- struct D : B { 
-     void foo(int blablabla, std::shared_ptr<LoggerInterface> logger) override { 
-     	std::cout << "foo: "<<blablabla<<" "<< logger<<std::endl;  
-     } 
- }; 
-   
- struct E : B { 
-     void foo(int blablabla, std::shared_ptr<LoggerInterface> logger = pi) override { 
-     	std::cout << "foo: "<<blablabla<<" "<< logger<<std::endl;  
-     } 
- }; 
-   
- int main() { 
- 	D d;  
- 	B *b=&d; 
- 	b->foo(15);  
- 	//d.foo(15); 
- 	E e;  
-   
- 	e.foo(16);  
- 	B *b2 = &e;  
- 	b2->foo(16); 
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IExvZ2dlckludGVyZmFjZSB7fTsgCgpzdGQ6OnNoYXJlZF9wdHI8TG9nZ2VySW50ZXJmYWNlPiBwaSA9IHN0ZDo6bWFrZV9zaGFyZWQ8TG9nZ2VySW50ZXJmYWNlPigpOyAKCnN0cnVjdCBCIHsKCXZpcnR1YWwgdm9pZCBmb28oaW50IGJsYWJsYWJsYSwgc3RkOjpzaGFyZWRfcHRyPExvZ2dlckludGVyZmFjZT4gbG9nZ2VyID0gbnVsbHB0cikgPSAwOwp9OwpzdHJ1Y3QgRCA6IEIgewogICAgdm9pZCBmb28oaW50IGJsYWJsYWJsYSwgc3RkOjpzaGFyZWRfcHRyPExvZ2dlckludGVyZmFjZT4gbG9nZ2VyKSBvdmVycmlkZSB7CiAgICAJc3RkOjpjb3V0IDw8ICJmb286ICI8PGJsYWJsYWJsYTw8IiAiPDwgbG9nZ2VyPDxzdGQ6OmVuZGw7IAogICAgfQp9OwoKc3RydWN0IEUgOiBCIHsKICAgIHZvaWQgZm9vKGludCBibGFibGFibGEsIHN0ZDo6c2hhcmVkX3B0cjxMb2dnZXJJbnRlcmZhY2U+IGxvZ2dlciA9IHBpKSBvdmVycmlkZSB7CiAgICAJc3RkOjpjb3V0IDw8ICJmb286ICI8PGJsYWJsYWJsYTw8IiAiPDwgbG9nZ2VyPDxzdGQ6OmVuZGw7IAogICAgfQp9OwoKaW50IG1haW4oKSB7CglEIGQ7IAoJQiAqYj0mZDsKCWItPmZvbygxNSk7IAoJLy9kLmZvbygxNSk7CglFIGU7IAoJCgllLmZvbygxNik7IAoJQiAqYjIgPSAmZTsgCgliMi0+Zm9vKDE2KTsKCQoJcmV0dXJuIDA7Cn0=