#include <memory>
struct Foo
{
int m_field1;
Foo(int field1):m_field1(field1){};
};
struct BitField {
struct {
unsigned long Field1:31;
unsigned long Field2:1;
} DUMMY;
};
int main()
{
BitField *p = new BitField();
//This Line compiles
auto sp1 = std::shared_ptr<Foo>(new Foo((unsigned long)p->DUMMY.Field1));
//But std::make_shared fails to compile
auto sp2 = std::make_shared<Foo>((unsigned long)p->DUMMY.Field1);
return 0;
}
I2luY2x1ZGUgPG1lbW9yeT4Kc3RydWN0IEZvbwp7CiAgICBpbnQgbV9maWVsZDE7CiAgICBGb28oaW50IGZpZWxkMSk6bV9maWVsZDEoZmllbGQxKXt9Owp9OwoKc3RydWN0IEJpdEZpZWxkIHsKICAgIHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyAgIEZpZWxkMTozMTsKICAgICAgICB1bnNpZ25lZCBsb25nICAgRmllbGQyOjE7CiAgICB9IERVTU1ZOwp9OwppbnQgbWFpbigpCnsKICAgIEJpdEZpZWxkICpwID0gbmV3IEJpdEZpZWxkKCk7CiAgICAvL1RoaXMgTGluZSBjb21waWxlcwogICAgYXV0byBzcDEgPSBzdGQ6OnNoYXJlZF9wdHI8Rm9vPihuZXcgRm9vKCh1bnNpZ25lZCBsb25nKXAtPkRVTU1ZLkZpZWxkMSkpOwogICAgLy9CdXQgc3RkOjptYWtlX3NoYXJlZCBmYWlscyB0byBjb21waWxlCiAgICBhdXRvIHNwMiA9IHN0ZDo6bWFrZV9zaGFyZWQ8Rm9vPigodW5zaWduZWQgbG9uZylwLT5EVU1NWS5GaWVsZDEpOwogICAgcmV0dXJuIDA7Cn0=