#include <memory>
namespace language_ext
{
struct new_unique_seed { };
template <class T>
inline std::unique_ptr<T> operator *(new_unique_seed, T *p)
{
return std::unique_ptr<T>(p);
}
struct new_unique_array_seed { };
template <class T>
inline std::unique_ptr<T[]> operator *(new_unique_array_seed, T *p)
{
return std::unique_ptr<T[]>(p);
}
}
#define new_unique ::language_ext::new_unique_seed() * new
#define new_unique_array ::language_ext::new_unique_array_seed() * new
#include <iostream>
int main()
{
auto p = new_unique int;
auto a = new_unique_array int[5];
std::cout << typeid(p).name() << std::endl;
std::cout << typeid(a).name() << std::endl;
return 0;
}
I2luY2x1ZGUgPG1lbW9yeT4KCm5hbWVzcGFjZSBsYW5ndWFnZV9leHQKewoKc3RydWN0IG5ld191bmlxdWVfc2VlZCB7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxUPiBvcGVyYXRvciAqKG5ld191bmlxdWVfc2VlZCwgVCAqcCkKewogICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+KHApOwp9CgpzdHJ1Y3QgbmV3X3VuaXF1ZV9hcnJheV9zZWVkIHsgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFRbXT4gb3BlcmF0b3IgKihuZXdfdW5pcXVlX2FycmF5X3NlZWQsIFQgKnApCnsKICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxUW10+KHApOwp9Cgp9CgojZGVmaW5lIG5ld191bmlxdWUgOjpsYW5ndWFnZV9leHQ6Om5ld191bmlxdWVfc2VlZCgpICogbmV3CiNkZWZpbmUgbmV3X3VuaXF1ZV9hcnJheSA6Omxhbmd1YWdlX2V4dDo6bmV3X3VuaXF1ZV9hcnJheV9zZWVkKCkgKiBuZXcKCiNpbmNsdWRlIDxpb3N0cmVhbT4KCmludCBtYWluKCkKewogICBhdXRvIHAgPSBuZXdfdW5pcXVlIGludDsKICAgYXV0byBhID0gbmV3X3VuaXF1ZV9hcnJheSBpbnRbNV07CgogICBzdGQ6OmNvdXQgPDwgdHlwZWlkKHApLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CiAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoYSkubmFtZSgpIDw8IHN0ZDo6ZW5kbDsKCiAgIHJldHVybiAwOwp9