在空std :: forward_list中定义before_begin()之后是否擦除元素?

时间:2015-08-19 12:04:33

标签: c++ c++11 forward-list

此代码是否在C ++标准库中定义了行为?

std::forward_list<T> list;
list.erase_after(list.before_begin());

直觉会说不,但我还没能找到这个特定情况的确切标准措辞。

1 个答案:

答案 0 :(得分:5)

erase_after的先决条件是:

  

iterator erase_after(const_iterator position);

     

需要: position之后的迭代器是可解除引用的。

因此,您的示例具有未定义的行为,因为list为空,因此list.before_begin()不可递增,因此后面没有迭代器。

如果列表至少有一个元素,则list.erase_after(list.before_begin())有效。