#include <memory>
#define new new_is_deprecated_resort_to_new_unique_new_shared_or_new_unsafe new
#define resolve_new_is_deprecated_resort_to_new_unique_new_shared_or_new_unsafe
#define resolve_xx(x) resolve_##x
#define resolve_x(x) resolve_xx(x)
#define operator_new operator resolve_x(new)
#define new_unsafe resolve_x(new)
struct new_unique_tag { } ;
template < typename T> std:: unique_ptr < T> operator * ( new_unique_tag, T* p) { return std:: unique_ptr < T> ( p) ; }
struct new_unique_array_tag { } ;
template < typename T> std:: unique_ptr < T [ ] > operator * ( new_unique_array_tag, T* p) { return std:: unique_ptr < T [ ] > ( p) ; }
#define new_unique new_unique_tag() * new_unsafe
#define new_unique_array new_unique_array_tag() * new_unsafe
struct test_custom_alloc
{
void * operator new_unsafe( size_t size)
{
return :: operator new_unsafe( size) ;
}
} ;
int main( )
{
auto test1 = new_unsafe int ;
auto test2 = new_unique int ;
( void ) test1;
( void ) test2;
return 0 ;
}
int main_doinitwrong( )
{
auto test = new int ;
( void ) test;
return 0 ;
}
I2luY2x1ZGUgPG1lbW9yeT4KCiNkZWZpbmUgbmV3IG5ld19pc19kZXByZWNhdGVkX3Jlc29ydF90b19uZXdfdW5pcXVlX25ld19zaGFyZWRfb3JfbmV3X3Vuc2FmZSBuZXcKI2RlZmluZSByZXNvbHZlX25ld19pc19kZXByZWNhdGVkX3Jlc29ydF90b19uZXdfdW5pcXVlX25ld19zaGFyZWRfb3JfbmV3X3Vuc2FmZQoKI2RlZmluZSByZXNvbHZlX3h4KHgpIHJlc29sdmVfIyN4CiNkZWZpbmUgcmVzb2x2ZV94KHgpIHJlc29sdmVfeHgoeCkKCiNkZWZpbmUgb3BlcmF0b3JfbmV3IG9wZXJhdG9yIHJlc29sdmVfeChuZXcpCiNkZWZpbmUgbmV3X3Vuc2FmZSByZXNvbHZlX3gobmV3KQoKc3RydWN0IG5ld191bmlxdWVfdGFnIHsgfTsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0ZDo6dW5pcXVlX3B0cjxUPiBvcGVyYXRvciAqKG5ld191bmlxdWVfdGFnLCBUKiBwKSB7IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4ocCk7IH0Kc3RydWN0IG5ld191bmlxdWVfYXJyYXlfdGFnIHsgfTsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0ZDo6dW5pcXVlX3B0cjxUIFtdPiBvcGVyYXRvciAqKG5ld191bmlxdWVfYXJyYXlfdGFnLCBUKiBwKSB7IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VCBbXT4ocCk7IH0KCiNkZWZpbmUgbmV3X3VuaXF1ZSBuZXdfdW5pcXVlX3RhZygpICogbmV3X3Vuc2FmZQojZGVmaW5lIG5ld191bmlxdWVfYXJyYXkgbmV3X3VuaXF1ZV9hcnJheV90YWcoKSAqIG5ld191bnNhZmUKCnN0cnVjdCB0ZXN0X2N1c3RvbV9hbGxvYwp7CiAgICB2b2lkKiBvcGVyYXRvciBuZXdfdW5zYWZlKHNpemVfdCBzaXplKQoJewoJCXJldHVybiA6Om9wZXJhdG9yIG5ld191bnNhZmUoc2l6ZSk7Cgl9Cn07CgppbnQgbWFpbigpCnsKCWF1dG8gdGVzdDEgPSBuZXdfdW5zYWZlIGludDsKCWF1dG8gdGVzdDIgPSBuZXdfdW5pcXVlIGludDsKCSh2b2lkKSB0ZXN0MTsKCSh2b2lkKSB0ZXN0MjsKCXJldHVybiAwOwp9CgppbnQgbWFpbl9kb2luaXR3cm9uZygpCnsKCWF1dG8gdGVzdCA9IG5ldyBpbnQ7Cgkodm9pZCkgdGVzdDsKCXJldHVybiAwOwp9Cg==