# std::common_iterator<I,S>::operator=

< cpp‎ | iterator‎ | common iterator

template< class I2, class S2 > requires std::convertible_to<const I2&, I> && std::convertible_to<const S2&, S> && std::assignable_from<I&, const I2&> && std::assignable_from<S&, const S2&> constexpr common_iterator& operator=( const common_iterator<I2, S2>& x ); |  | (C++20 起)

从 `x` 的底层 std::variant 成员对象 `var` 赋值给 *this 的。

令 `i` 为 x.var.index() 。则此赋值运算符等价于：

- std::get<i>(var) = std::get<i>(x.var) ，若 var.index() == i ，
- 否则为 var.emplace<i>(std::get<i>(x.var)) 。

若 `x` 在非法状态，即 x.var.valueless_by_exception() 等于 true 则行为未定义。

### 参数

x | - | 作为复制来源的迭代器

### 返回值

*this 。

### 参数

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <initializer_list>

    int main() {
        const auto il = {1,2,3,4,5,6};
        using CI = std::common_iterator<
                       std::counted_iterator<std::initializer_list<int>::iterator>,
                       std::default_sentinel_t>;
        CI first { std::counted_iterator{std::next(begin(il), 1), ssize(il) - 1} };
        const CI first2 { std::counted_iterator{std::next(begin(il), 2), ssize(il) - 2} };
        const CI last { std::default_sentinel };
        std::copy(first, last, std::ostream_iterator<int>{std::cout, " "});
        std::cout << '\n';
        first = first2;
        std::copy(first, last, std::ostream_iterator<int>{std::cout, " "});
        std::cout << '\n';
    }

输出：

    2 3 4 5 6
    3 4 5 6

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
LWG 3574 | C++20 | `variant` 为完全 constexpr (P2231R1) 但 `common_iterator` 不是 | 亦使之为 constexpr

### 参阅

(构造函数) (C++20) | 构造新的迭代器适配器 (公开成员函数)