#pragma once #include #if __cplusplus <= 201103L namespace { template struct is_unbound_array : std::false_type {}; template struct is_unbound_array : std::true_type {}; template struct is_bound_array : std::false_type {}; template struct is_bound_array : std::true_type {}; } namespace std { template typename std::enable_if::value, std::unique_ptr>::type make_unique(Args&&... args) { return std::unique_ptr(new T(std::forward(args)...)); } template typename std::enable_if::value, std::unique_ptr>::type make_unique(size_t size) { return std::unique_ptr(new typename std::remove_extent::type[size]()); } template< class T, class... Args > typename std::enable_if::value>::type make_unique( Args&&... args ) = delete; } #endif