fork download
  1. #include <memory>
  2.  
  3. namespace language_ext
  4. {
  5.  
  6. struct new_unique_seed { };
  7.  
  8. template <class T>
  9. inline std::unique_ptr<T> operator *(new_unique_seed, T *p)
  10. {
  11. return std::unique_ptr<T>(p);
  12. }
  13.  
  14. struct new_unique_array_seed { };
  15.  
  16. template <class T>
  17. inline std::unique_ptr<T[]> operator *(new_unique_array_seed, T *p)
  18. {
  19. return std::unique_ptr<T[]>(p);
  20. }
  21.  
  22. }
  23.  
  24. #define new_unique ::language_ext::new_unique_seed() * new
  25. #define new_unique_array ::language_ext::new_unique_array_seed() * new
  26.  
  27. #include <iostream>
  28.  
  29. int main()
  30. {
  31. auto p = new_unique int;
  32. auto a = new_unique_array int[5];
  33.  
  34. std::cout << typeid(p).name() << std::endl;
  35. std::cout << typeid(a).name() << std::endl;
  36.  
  37. return 0;
  38. }
Success #stdin #stdout 0s 3060KB
stdin
Standard input is empty
stdout
St10unique_ptrIiSt14default_deleteIiEE
St10unique_ptrIA_iSt14default_deleteIS0_EE