最終更新日時: 2025年08月31日 19時06分36秒 (JST)
Raclamusi が更新

履歴 編集

class template
<tuple>

# std::basic_common_reference(C++23)

    namespace std {
    template<tuple-like TTuple, tuple-like UTuple,
        template<class> class TQual, template<class> class UQual>
      struct basic_common_reference<TTuple, UTuple, TQual, UQual>;
    }

## 概要

`tuple`と`tuple-like`なオブジェクについて、`common_reference`で共通の参照型を取得できるようにアダプトする`basic_common_reference`の特殊化である。

ユーザーが直接この特殊化を利用する必要はない。`common_reference`を使用すること。

## 効果

`tuple<common_reference_t<TQual<TTypes>, UQual<UTypes>>...>`によって得られた型をメンバ型`type`として定義する。

## 要件

- `TTuple`か`UTuple`のどちらかが`tuple`の特殊化であること。
- `TTuple`と`UTuple`のそれぞれについて、（次の`T`を置き換える形で）`is_same_v<T, decay_t<T>>`であること。
  - 実質的には`TTuple`と`Utuple`について、参照型ではなく、最上位の`const`/`volatile`修飾も持っていないこと要求する。
- `TTuple`と`UTuple`の要素数が一致していること。
  - 具体的には、`tuple_size_v<TTuple> == tuple_size_v<UTuple>`であること。
- `tuple<common_reference_t<TQual<TTypes>, UQual<UTypes>>...>`が正しく型を表すこと。

## バージョン

### 言語

- C++23

### 処理系

- Clang: ???
- GCC: ???
- ICC: ???
- Visual C++: ???

## 関連項目

- `basic_common_reference`

## 参照

- P2165R4 Compatibility between `tuple`, `pair` and tuple-like objects