对std :: optional使用std :: iter_swap

时间:2015-08-11 11:10:10

标签: c++ c++11 std c++14 optional

看看std::iter_swap reference我的结论是:

struct A {};
std::experimental::optional< A > x{A{}}, y{A{}};
std::iter_swap(x, y);

是合法的。是这种情况吗?

ForwardIterator 的参数的要求意味着它们应该满足一个要求:在解除引用(迭代器)传递的对象之后应该保持有效(可解除引用?)状态。这是正确的吗?

1 个答案:

答案 0 :(得分:3)

ForwardIterator concept比你说的更受限制。 只有在使用类似实现的内容时,您的示例才会起作用:

template<class ForwardIt1, class ForwardIt2>
void iter_swap(ForwardIt1 a, ForwardIt2 b)
{
   using std::swap;
   swap(*a, *b);
}

但由于不保证您实际上不会使用iter_swap作为可选项。你真的应该使用swap for optional