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 ++和我的错误吗?
你是对的.这是C++ 11中的一个缺陷,由http://cplusplus.github.io/LWG/lwg-defects.html#2033为C++ 14修复.
目前的措辞是:
效果:如果
sz < size(),则删除size() - sz序列中的最后一个元素.否则,将sz - size()默认插入的元素追加 到序列中.要求:
T应MoveInsertable和DefaultInsertable成*this.
Destructible表95中的要求适用于所有容器上的所有操作,而不仅仅是resize().