make_unique的第三个"重载"的目的是什么?

Dan*_*rey 5 c++ unique-ptr c++11 c++14

根据N3797,std::make_unique有三个"过载":

20.8.1.4 unique_ptr创建[unique.ptr.create]

template <class T, class... Args> unique_ptr<T> make_unique(Args&&... args);

1 备注:除非T不是数组,否则此函数不应参与重载决策.

2 返回: unique_ptr<T>(new T(std::forward<Args>(args)...)).

template <class T> unique_ptr<T> make_unique(size_t n);

3 备注:除非T是未知范围的数组,否则此函数不应参与重载决策.

4 返回: unique_ptr<T>(new remove_extent_t<T>[n]()).

template <class T, class... Args>unspecifiedmake_unique(Args&&...) = delete;

5 备注:除非T是已知绑定的数组,否则此函数不应参与重载决策.

我不明白第三个删除重载的原因.如果T是已知边界的数组,前两个不参与重载决策,那么为什么标准指定第三个?将它遗漏并仅指定前两个过载是不是完全相同?

编辑:请注意,我知道为什么make_unique<T[N]>不允许.问题不在于此,而是为什么需要第三次重载.AFAICT,拥有或不拥有它的效果是相同的,甚至是wrt make_unique<T[N]>.