这个问题是在我回答这是另一个问题时提出的。
N3337 23.3.6.3“矢量容量”(载于770页):
空洞尺寸调整(Size_type sz); E
sz <= size():Ifff,等效于erase(begin() + sz, end());。如果为size() < sz,则将sz - size()值初始化元素追加到序列中。 要求:t将被CopyInsertable转换为*this。
但是,clang++说,虽然T是不可复制的,但没关系。和我认为,resize(size_type)只需要可销毁/可移动/默认的可构造性,这是有意义的。如果sz <= size破坏,则追加(使用默认构造,如果容量不够则销毁和移动),如果size() < sz。
什么是真理?这是标准缺陷吗?还是clang++和我都错了?
发布于 2015-06-19 11:42:42
你是对的。这是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()。
https://stackoverflow.com/questions/30937208
复制相似问题