std :: vector :: resize(size_type)需要CopyInsertable吗?

ikh*_*ikh 6 c++ language-lawyer c++11

这个问题是在我回答另一个问题的时候提出的.

N3337 23.3.6.3"向量容量"表示(见770页):

void resize(size_type sz);

E ff ects:If sz <= size(),相当于erase(begin() + sz, end());.如果size() < sz,将sz - size()值初始化元素附加 到序列.

要求:T应为CopyInsertable到*this.

然而,clang ++表示虽然T不可复制但也没关系.而且我认为resize(size_type)只需要可破坏/可移动/默认构造就可以了.如果sz <= size,追加(如果容量不够,则追加(使用默认构造,销毁和移动))size() < sz.

什么是真理?这是标准缺陷吗?或者这是clang ++和我的错误吗?

Jon*_*ely 7

你是对的.这是C++ 11中的一个缺陷,由http://cplusplus.github.io/LWG/lwg-defects.html#2033为C++ 14修复.

目前的措辞是:

效果:如果sz < size(),则删除size() - sz序列中的最后一个元素.否则,将sz - size()默认插入的元素追加 到序列中.

要求:TMoveInsertableDefaultInsertable*this.

Destructible表95中的要求适用于所有容器上的所有操作,而不仅仅是resize().