, , :
namespace xtd{
template< typename T, std::size_t align = std::alignment_of<T>::value, typename... Args >
std::shared_ptr<T> make_shared(Args&&... args){
#if defined(_WIN64) || defined(_WIN32)
#if defined(_WIN64)
const std::size_t default_alignment = 16;
#else
const std::size_t default_alignment = 8;
#endif
#else
#error "Only windows for now"
#endif
if (align > default_alignment) {
typedef aligned_allocator<T, align> alloc_type;
return std::allocate_shared<T, alloc_type>(alloc_type(), std::forward<Args>(args)...);
}
else {
return std::make_shared<T>(std::forward<Args>(args)...);
}
}
}
std::make_shared xtd::make_shared:)
, ...