#include <memory>
#include <utility>
#include <type_traits>
template <bool, typename T, std::size_t>
struct maybe_array
{
typedef T type;
};
template <typename T, std::size_t N>
struct maybe_array<true, T, N>
{
typedef typename std::remove_extent<T>::type type[N];
};
template <typename T, typename ...Args>
std::unique_ptr<T> make_unique(Args &&... args)
{
return std::unique_ptr<T>(new typename maybe_array<std::is_array<T>::value, T, sizeof...(Args)>::type { std::forward<Args>(args)... });
}
int main()
{
auto p = make_unique<int[]>(11, 22, 33);
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCnRlbXBsYXRlIDxib29sLCB0eXBlbmFtZSBULCBzdGQ6OnNpemVfdD4Kc3RydWN0IG1heWJlX2FycmF5CnsKICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CnN0cnVjdCBtYXliZV9hcnJheTx0cnVlLCBULCBOPgp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2V4dGVudDxUPjo6dHlwZSB0eXBlW05dOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIC4uLkFyZ3M+CnN0ZDo6dW5pcXVlX3B0cjxUPiBtYWtlX3VuaXF1ZShBcmdzICYmLi4uIGFyZ3MpCnsKICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4obmV3IHR5cGVuYW1lIG1heWJlX2FycmF5PHN0ZDo6aXNfYXJyYXk8VD46OnZhbHVlLCBULCBzaXplb2YuLi4oQXJncyk+Ojp0eXBlIHsgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uIH0pOwp9CgppbnQgbWFpbigpCnsKICAgIGF1dG8gcCA9IG1ha2VfdW5pcXVlPGludFtdPigxMSwgMjIsIDMzKTsKfQo=