#include <memory>
struct IController
{
virtual void doS() = 0;
};
struct IAnotherController
: public IController
{
virtual void notDo() = 0;
};
class Controller : public IAnotherController
{
public:
void doS() {};
void notDo() {};
};
std::shared_ptr< IAnotherController >
create()
{
return std::make_shared< Controller >();
}
int main() {
std::shared_ptr< IController > ttt;
ttt = create();
}
I2luY2x1ZGUgPG1lbW9yeT4KCnN0cnVjdCBJQ29udHJvbGxlcgp7Cgl2aXJ0dWFsIHZvaWQgZG9TKCkgPSAwOwp9OwoKc3RydWN0IElBbm90aGVyQ29udHJvbGxlcgoJOiBwdWJsaWMgSUNvbnRyb2xsZXIKewoJdmlydHVhbCB2b2lkIG5vdERvKCkgPSAwOwp9OwoKY2xhc3MgQ29udHJvbGxlciA6IHB1YmxpYyBJQW5vdGhlckNvbnRyb2xsZXIKewoJcHVibGljOgoJdm9pZCBkb1MoKSB7fTsKCXZvaWQgbm90RG8oKSB7fTsKfTsKCnN0ZDo6c2hhcmVkX3B0cjwgSUFub3RoZXJDb250cm9sbGVyID4KY3JlYXRlKCkKewoJcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8IENvbnRyb2xsZXIgPigpOwp9CgoKaW50IG1haW4oKSB7CiAgICBzdGQ6OnNoYXJlZF9wdHI8IElDb250cm9sbGVyID4gdHR0OwogICAgdHR0ID0gY3JlYXRlKCk7Cn0K