最終更新日時(UTC):
が更新

履歴 編集

function
<iterator>

std::common_iterator::operator->(C++20)

decltype(auto) operator->() const requires /*see below*/;

概要

イテレータを間接参照する。

テンプレートパラメータ制約

requires節には以下の制約式が指定される。

indirectly_readable<const I> &&
(requires(const I& i) { i.operator->(); } ||
 is_reference_v<iter_reference_t<I>> ||
 constructible_from<iter_value_t<I>, iter_reference_t<I>>)

事前条件

holds_alternative<I>(v_) == true

戻り値

I, Sの値のどちらかをvariant<I, S>型のメンバ変数v_に保持しているとして、次のいずれか

  • Iがポインタ型であり、get<I>(v_).operator->()が呼び出し可能な場合 : return get<I>(v_);

  • iter_reference_t<I>が参照型の場合 : 以下と等価

    auto&& tmp = *get<I>(v_);
    return addressof(tmp);
    

  • それ以外の場合 : return proxy(*get<I>(v_));
    proxyは次のように定義される説明専用のクラス。

    class proxy {
      iter_value_t<I> keep_;
      proxy(iter_reference_t<I>&& x)
        : keep_(std::move(x)) {}
    public:
      const iter_value_t<I>* operator->() const {
        return addressof(keep_);
      }
    };
    

バージョン

言語

  • C++20

処理系

参照