看看std::iter_swap
reference我的结论是:
struct A {};
std::experimental::optional< A > x{A{}}, y{A{}};
std::iter_swap(x, y);
是合法的。是这种情况吗?
对 ForwardIterator 的参数的要求意味着它们应该满足一个要求:在解除引用(迭代器)传递的对象之后应该保持有效(可解除引用?)状态。这是正确的吗?
答案 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