Namespaces
Variants

std::experimental::ranges:: common_type

From cppreference.net
template < class ... T >
struct common_type ;
(ranges TS)

すべての型 T... に共通する型、すなわちすべての T... が暗黙的に変換可能な型を決定します。そのような型が存在する場合(以下の規則に従って決定)、メンバ type はその型を示します。それ以外の場合、メンバ type は存在しません。 T... 内のいずれかの型が(修飾された可能性のある) void 以外の不完全型である場合、動作は未定義です。

  • sizeof... ( T ) がゼロの場合、メンバ type は存在しません。
  • sizeof... ( T ) が1の場合(すなわち T... が単一の型 T0 のみを含む場合)、メンバ type std:: decay_t < T0 > と同じ型を示します。
  • sizeof... ( T ) が2の場合(すなわち T... が正確に2つの型 T1 T2 を含む場合)、
  • T1 T2 の少なくとも一方に std::decay を適用した結果が元の型と異なる場合、メンバ type ranges :: common_type_t < std:: decay_t < T1 > , std:: decay_t < T2 >> と同じ型を表す(存在する場合)。存在しない場合、メンバ type は存在しない。
  • それ以外の場合(かつ ranges :: common_type < T1, T2 > に対するユーザー特殊化が存在しない場合)、 std:: common_type_t < T1, T2 > が well-formed であれば、メンバ type はその型を表す。
  • それ以外の場合、メンバ type std:: decay_t < decltype ( false ? std:: declval < const T1 & > ( ) : std:: declval < const T2 & > ( ) ) > の型を表す(その条件式が well-formed である場合)。そうでない場合、メンバ type は存在しない。
  • sizeof... ( T ) が2より大きい場合(すなわち、 T... が型 T1, T2, R... で構成される場合)、 ranges :: common_type_t < T1, T2 > が存在するならば、メンバ type ranges :: common_type_t < ranges :: common_type_t < T1, T2 > , R... > を表す(そのような型が存在する場合)。それ以外の場合、メンバ type は存在しない。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Member types、Helper types、Specializations、Notes、Example、See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や書式設定は完全に保持しています

メンバー型

名前 定義
type すべての T... に対する共通型

ヘルパー型

template < class ... T >
using common_type_t = typename common_type < T... > :: type ;

特殊化

ユーザーは型 T1 T2 に対して common_type を特殊化することができます。

  • T1 T2 の少なくとも一方がユーザー定義型に依存しており、かつ
  • std::decay T1 T2 の両方に対して恒等変換である。

そのような特殊化が type という名前のメンバを持つ場合、それは T1 T2 の両方が明示的に変換可能な、CV修飾されていない非参照型を指す、公開かつ明確なメンバ型でなければなりません。さらに、 ranges :: common_type_t < T1, T2 > ranges :: common_type_t < T2, T1 > は同じ型を示さなければなりません。

これらの規則に違反して common_type の特殊化を追加するプログラムは未定義動作となります。

注記

プロモーションの対象とならない算術型の場合、共通型は以下のような(混合モードの可能性がある)算術式の型と見なすことができます: T0 ( ) + T1 ( ) + ... + Tn ( )

関連項目

型のグループの共通型を決定する
(クラステンプレート)
型の集合の共通参照型を決定する
(クラステンプレート)