最終更新日時: 2026年02月26日 13時20分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<iterator>

# std::common_iterator::operator=(C++20)

    template<class I2, class S2>
      requires convertible_to<const I2&, I> && convertible_to<const S2&, S> &&
               assignable_from<I&, const I2&> && assignable_from<S&, const S2&>
    common_iterator& operator=(const common_iterator<I2, S2>& x);

## 概要

`common_iterator`オブジェクトをコピー代入する。

## 堅牢化された事前条件

`x.v_.valueless_by_exception() == false`であること。

## 効果

`I, S`の値のどちらかを`variant<I, S>`型のメンバ変数`v_`に保持しており、`i = x.v_.index()`として、次のどちらか

- `i == v_.index()`が`true`である場合 : `get<i>(v_) = get<i>(x.v_)`
- それ以外の場合 : `v_.emplace<i>(get<i>(x.v_))`

## 戻り値

`*this`

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 9 ✅

## 参照

- P0896R4 The One Ranges Proposal (was Merging the Ranges TS)
- P3697R1 Minor additions to C++26 standard library hardening
- P3878R1 Standard library hardening should not use the 'observe' semantic