diff --git a/src/make_unique.hpp b/src/make_unique.hpp new file mode 100644 index 00000000..98260bca --- /dev/null +++ b/src/make_unique.hpp @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +namespace std +{ + template struct _Unique_if + { + typedef unique_ptr _Single_object; + }; + + template struct _Unique_if + { + typedef unique_ptr _Unknown_bound; + }; + + template struct _Unique_if + { + typedef void _Known_bound; + }; + + template + typename _Unique_if::_Single_object + make_unique(Args&&... args) + { + return unique_ptr(new T(std::forward(args)...)); + } + + template + typename _Unique_if::_Unknown_bound + make_unique(size_t n) + { + typedef typename remove_extent::type U; + return unique_ptr(new U[n]()); + } + + template + typename _Unique_if::_Known_bound + make_unique(Args&&...) = delete; +}