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

时间:2015-06-19 11:37:59

标签: c++ c++11 language-lawyer

我在回答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 ++和我的错误吗?

1 个答案:

答案 0 :(得分:7)

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

为C ++ 14修复的

目前的措辞是:

  

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

     

要求:T应为MoveInsertableDefaultInsertable*this

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