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

Is erasing element after before_begin() defined in an empty std::forward_list?

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

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

直觉会说不,但我无法找到针对此特定案例的确切标准措辞。

erase_after 的前提条件是:

iterator erase_after(const_iterator position);

Requires: The iterator following position is dereferenceable.

所以你的例子有未定义的行为,因为 list 是空的,所以 list.before_begin() 不可递增,所以它后面没有迭代器。

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