#include <memory>
#include <utility>
struct IMoo {};
struct MooA : public IMoo {};
struct MooB : public IMoo {};
template<typename T, typename... Args>
std::shared_ptr<IMoo> make_shared_moo(Args&&... args) {
return std::make_shared<T>(std::forward<Args>(args)...);
}
class Foo
{
public:
Foo() : m_moo(false ? make_shared_moo<MooA>() : make_shared_moo<MooB>())
{
}
private:
std::shared_ptr<IMoo> m_moo;
};
int main() {
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdHJ1Y3QgSU1vbyB7fTsKc3RydWN0IE1vb0EgOiBwdWJsaWMgSU1vbyB7fTsKc3RydWN0IE1vb0IgOiBwdWJsaWMgSU1vbyB7fTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CnN0ZDo6c2hhcmVkX3B0cjxJTW9vPiBtYWtlX3NoYXJlZF9tb28oQXJncyYmLi4uIGFyZ3MpIHsKCXJldHVybiBzdGQ6Om1ha2Vfc2hhcmVkPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Cn0KCmNsYXNzIEZvbwp7CnB1YmxpYzoKICAgIEZvbygpIDogbV9tb28oZmFsc2UgPyBtYWtlX3NoYXJlZF9tb288TW9vQT4oKSA6IG1ha2Vfc2hhcmVkX21vbzxNb29CPigpKQogICAgewogICAgfQpwcml2YXRlOgogICAgc3RkOjpzaGFyZWRfcHRyPElNb28+IG1fbW9vOwp9OwoKCmludCBtYWluKCkgewp9