我在回答this another question时提出了这个问题。
N3337 23.3.6.3"载体容量"说(它在770页):
void resize(size_type sz);
效果:如果
sz <= size()
,相当于erase(begin() + sz, end());
。如果size() < sz
,请附加sz - size()
将值初始化的元素添加到序列中。要求:T应为CopyInsertable到* this。
然而,clang++ says it's okay though T is not copyable.我认为resize(size_type)
仅需要可销毁/可移动/默认可构造是有道理的。如果sz <= size
附加size() < sz
,则追加(使用默认构造,如果容量不足则销毁和移动)。{/ 1>
什么是真相?这是标准缺陷吗?或者这是clang ++和我的错误吗?
答案 0 :(得分:7)
你是对的。这是C ++ 11中的一个缺陷,它是由http://cplusplus.github.io/LWG/lwg-defects.html#2033
为C ++ 14修复的目前的措辞是:
效果:如果
sz < size()
,则删除序列中的最后size() - sz
个元素。否则,追加sz - size()
默认插入序列的元素。要求:
T
应为MoveInsertable
且DefaultInsertable
为*this
。
表{95}中对Destructible
的要求适用于所有容器上的所有操作,而不仅仅是resize()
。