std:: indirectly_readable_traits
|
定義済みヘッダー
<iterator>
|
||
|
template
<
class
I
>
struct indirectly_readable_traits { } ; |
(1) | (C++20以降) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
T
*
>
:
|
(2) | (C++20以降) |
|
template
<
class
I
>
requires
std::
is_array_v
<
I
>
|
(3) | (C++20以降) |
|
template
<
class
T
>
struct
indirectly_readable_traits
<
const
T
>
:
|
(4) | (C++20以降) |
|
template
<
/* has-member-value-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(5) | (C++20以降) |
|
template
<
/* has-member-element-type */
T
>
struct
indirectly_readable_traits
<
T
>
:
|
(6) | (C++20以降) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
|
(7) | (C++20以降) |
|
template
<
/* has-member-value-type */
T
>
requires
/* has-member-element-type */
<
T
>
&&
|
(8) | (C++20以降) |
|
ヘルパークラスとコンセプト
|
||
|
template
<
class
>
struct /* 条件値型 */ { } ; |
(1) | ( 説明専用* ) |
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(2) | ( 説明専用* ) |
|
template
<
class
T
>
concept
/* has-member-value-type */
=
|
(3) | ( 説明専用* ) |
|
template
<
class
T
>
concept
/* メンバー要素型を持つ */
=
|
(4) | ( 説明専用* ) |
テンプレート引数の関連付けられた値の型を計算します。関連付けられた値の型が存在する場合、それはネストされた型
value_type
によって表され、そうでない場合
value_type
は定義されません。プログラムは
プログラム定義型
に対して
indirectly_readable_traits
を特殊化することができます。
目次 |
説明
上記の特殊化は、以下のように非公式に説明できます。
型
T
が与えられたとき、その関連値型
V
は以下のように決定されます:
-
Tがconst修飾されている場合、Vはconst修飾されていないTの関連付けられた値型です。 -
それ以外の場合、
Tが配列型であれば、VはCV修飾されていない配列要素型です。 -
それ以外の場合、条件付き値型
Cが最初に決定されます:
-
-
Tがポインタ型の場合、Cは指し示される型となる。 -
それ以外の場合、
Tがネスト型value_typeとelement_typeを持つ場合:
-
-
これらの型が(CV修飾を考慮せず)同一の場合、
Cはtypename T::value_typeとなる。 -
それ以外の場合、
Cは未定義となる。
-
これらの型が(CV修飾を考慮せず)同一の場合、
-
それ以外の場合、
Tがネスト型value_typeを持ちelement_typeを持たない場合、Cはtypename T::value_typeとなる。 -
それ以外の場合、
Tがネスト型element_typeを持ちvalue_typeを持たない場合、Cはtypename T::element_typeとなる。 -
それ以外の場合、
Cは未定義となる。
-
-
次に
VはCから以下のように決定される:-
Cが未定義、またはCが オブジェクト型 でない場合、Vは未定義となる。 -
それ以外の場合、
VはCV修飾なしのCとなる。
-
注記
value_type
は、
indirectly_readable
のような間接読み取り可能な型で使用することを意図しています。範囲での使用は意図されていません。
例
|
このセクションは不完全です
理由: 例がありません |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 修正後の動作 |
|---|---|---|---|
| LWG 3446 | C++20 |
value_type
と
element_type
の両方のネスト型を持つ型に対して
特殊化 (5,6) が曖昧であった |
特殊化 (8) を追加 |
| LWG 3541 | C++20 |
LWG 3446により
value_type
と
element_type
が異なる場合に
ハードエラーが発生するようになった |
特殊化 (7) を追加 |
関連項目
|
(C++20)
|
型が
*
演算子を適用することで間接的に読み取り可能であることを指定する
(コンセプト) |
|
(C++20)
(C++20)
(C++23)
(C++20)
(C++20)
(C++20)
|
イテレータの関連型を計算する
(エイリアステンプレート) |
|
イテレータのプロパティに対する統一インターフェースを提供する
(クラステンプレート) |