#include <memory>
#include <experimental/memory>
class Node {
public:
int32_t x;
};
int main()
{
{
std::shared_ptr<Node> shared_node{std::make_shared<Node>()};
std::weak_ptr<Node> weak_node{shared_node};
// this ^ works
}
{
std::unique_ptr<Node> unique_node{std::make_unique<Node>()};
// but the following doesn't work :(
// std::experimental::observer_ptr<Node> observer_node{unique_node};
std::experimental::observer_ptr<Node> observer_node{std::experimental::observer_ptr<Node>(unique_node.get())};
// any better way to do this ^ ?
}
return 0;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGV4cGVyaW1lbnRhbC9tZW1vcnk+CgpjbGFzcyBOb2RlIHsKcHVibGljOgoJaW50MzJfdCB4Owp9OwoKaW50IG1haW4oKQp7Cgl7CgkJc3RkOjpzaGFyZWRfcHRyPE5vZGU+IHNoYXJlZF9ub2Rle3N0ZDo6bWFrZV9zaGFyZWQ8Tm9kZT4oKX07CgkJc3RkOjp3ZWFrX3B0cjxOb2RlPiB3ZWFrX25vZGV7c2hhcmVkX25vZGV9OwoJCS8vIHRoaXMgXiB3b3JrcwoJfQoJCgl7CgkJc3RkOjp1bmlxdWVfcHRyPE5vZGU+IHVuaXF1ZV9ub2Rle3N0ZDo6bWFrZV91bmlxdWU8Tm9kZT4oKX07CgkJLy8gYnV0IHRoZSBmb2xsb3dpbmcgZG9lc24ndCB3b3JrIDooCgkJLy8gc3RkOjpleHBlcmltZW50YWw6Om9ic2VydmVyX3B0cjxOb2RlPiBvYnNlcnZlcl9ub2Rle3VuaXF1ZV9ub2RlfTsKCQlzdGQ6OmV4cGVyaW1lbnRhbDo6b2JzZXJ2ZXJfcHRyPE5vZGU+IG9ic2VydmVyX25vZGV7c3RkOjpleHBlcmltZW50YWw6Om9ic2VydmVyX3B0cjxOb2RlPih1bmlxdWVfbm9kZS5nZXQoKSl9OwoJCS8vIGFueSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgXiA/Cgl9CgkKCXJldHVybiAwOwp9