#include <memory>
struct IMoo {};
struct MooA : public IMoo {};
struct MooB : public IMoo {};
class Foo
{
public:
Foo() : m_moo(false ? decltype(m_moo)(std::make_shared<MooA>()) : decltype(m_moo)(std::make_shared<MooB>()))
{
}
private:
std::shared_ptr<IMoo> m_moo;
};
int main() {
}
I2luY2x1ZGUgPG1lbW9yeT4KCgpzdHJ1Y3QgSU1vbyB7fTsKc3RydWN0IE1vb0EgOiBwdWJsaWMgSU1vbyB7fTsKc3RydWN0IE1vb0IgOiBwdWJsaWMgSU1vbyB7fTsKCmNsYXNzIEZvbwp7CnB1YmxpYzoKICAgIEZvbygpIDogbV9tb28oZmFsc2UgPyBkZWNsdHlwZShtX21vbykoc3RkOjptYWtlX3NoYXJlZDxNb29BPigpKSA6IGRlY2x0eXBlKG1fbW9vKShzdGQ6Om1ha2Vfc2hhcmVkPE1vb0I+KCkpKQogICAgewogICAgfQpwcml2YXRlOgogICAgc3RkOjpzaGFyZWRfcHRyPElNb28+IG1fbW9vOwp9OwoKCmludCBtYWluKCkgewp9