与えられた型を全て参照可能な、共通の参照型を取得する。要件Types...の全ての型は完全型であるか、const/volatile修飾された(あるいはされていない)voidでなければならない。効果Types...に含まれる全ての型を参照可能な参照型を、メンバ型typeとして定義する。typeは必ずしも参照型であるとは限らない。詳細には、次のように決定される。メンバ型typeは定義されない。T2>;そうでなければ、メンバ型typeは定義されない。Rest...>;のようにメンバ型typeを定義。なければ、メンバ型typeは定義されない。本メタ関数common_referenceは、より一般的なイテレータのvalue_typeとreferenceとの間の関係性を定義するために導入された。ポインタ型やC++17までの標準ライブラリにおける普通のイテレータ型では、そのreference型はvalue_type&の別名として定義されるという関係性がある。value_type&に変換できる(ことが期待される)。C++20から追加されるrangeライブラリの元となったrange-v3ライブラリにおけるzip_view(標準ライブラリへはC++23で導入される)のプロキシイテレータのように、特殊なイテレータではそのような関係性が必ずしも成り立つとは限らない。このような関係性を持つ型があるとジェネリックなアルゴリズムをより簡易に書くことができるようになるなどメリットがあるため、そのような型を求めるためにcommon_referenceが導入された。他にも、2つの型の間で定義されるコンセプトにおいて、その2つの型の間で上記のような関係性が自然に要求される場合に、common_reference_withコンセプトを通じて利用される。下に提供されています。