std::common_iterator<I,S>:: operator*,->
|
constexpr
decltype
(
auto
)
operator
*
(
)
;
|
(1) | (C++20以降) |
|
constexpr
decltype
(
auto
)
operator
*
(
)
const
requires /*dereferenceable*/ < const I > ; |
(2) | (C++20以降) |
|
constexpr
auto
operator
-
>
(
)
const
requires /* 説明を参照 */ ; |
(3) | (C++20以降) |
|
ヘルパー型
|
||
|
class
/*proxy*/
{
std::
iter_value_t
<
I
>
keep_
;
|
(4) | ( 説明専用* ) |
現在の要素へのポインタまたは参照、あるいはそれを保持するプロキシを返します。
基となる
std::variant
メンバオブジェクト
var
が型
I
のオブジェクトを保持していない場合、すなわち
std::
holds_alternative
<
I
>
(
var
)
が
false
に等しい場合、動作は未定義です。
it
を型
I
のイテレータとし、
var
が保持するもの、すなわち
std
::
get
<
I
>
(
var
)
とする。
it
をデリファレンスした結果を返します。
-
Iがポインタ型であるか、式it.operator->()が適切に形成される場合、 return it ; と等価。 - それ以外の場合、 std:: iter_reference_t < I > が参照型である場合、 auto && tmp = * it ; return std:: addressof ( tmp ) ; と等価。
-
それ以外の場合、
return
proxy
(
*
it
)
;
と等価。ここで
proxyは説明専用クラス (4) である。
std:: indirectly_readable < const I > && (
requires
(
const
I
&
i
)
{
i.
operator
-
>
(
)
;
}
||
std::
is_reference_v
<
std::
iter_reference_t
<
I
>>
||
std::
constructible_from
<
std::
iter_value_t
<
I
>
,
std::
iter_reference_t
<
I
>>
目次 |
パラメータ
(なし)
戻り値
例
#include <complex> #include <initializer_list> #include <iostream> #include <iterator> using std::complex_literals::operator""i; int main() { const auto il = {1i, 3.14 + 2i, 3i, 4i, 5i}; using CI = std::common_iterator< std::counted_iterator<decltype(il)::iterator>, std::default_sentinel_t>; CI ci{std::counted_iterator{std::next(begin(il), 1), std::ssize(il) - 1}}; std::cout << *ci << ' ' << ci->real() << '\n'; }
出力:
(3.14,2) 3.14
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3574 | C++20 |
variant
は完全なconstexpr(P2231R1)であったが、
common_iterator
はそうではなかった
|
同様にconstexpr化 |
| LWG 3595 | C++20 | プロキシ型の関数にconstexprとnoexceptが欠如していた | 追加 |
| LWG 3672 | C++20 |
operator->
が通常の場合に参照を返す可能性があった
|
常に値で返す |
関連項目
common_iteratorを新しく構築する
(public member function) |