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
処理系
- Clang: ??
- GCC: 10.1 ✅
- Visual C++: 2019 Update 9 ✅