#pragma once #include #ifdef DXX_HAVE_CXX14_MAKE_UNIQUE using std::make_unique; #else namespace detail { template struct unique_enable { typedef std::unique_ptr scalar_type; }; template struct unique_enable { typedef std::unique_ptr vector_type; typedef T element_type; }; template struct unique_enable {}; } template static inline typename detail::unique_enable::scalar_type make_unique(Args&&... args) { return typename detail::unique_enable::scalar_type{new T(std::forward(args)...)}; } template static inline typename detail::unique_enable::vector_type make_unique(std::size_t N) { return typename detail::unique_enable::vector_type{new typename detail::unique_enable::element_type[N]()}; } #endif