最終更新日時(UTC):
が更新

履歴 編集

継承コンストラクタからのクラステンプレート引数の推論(C++23)

概要

C++23では、派生クラスで定義した継承コンストラクタからでも、クラステンプレート引数を推論できるようになる。

基本的な例:

template <typename T>
struct B {
  B(T);
};

template <typename T>
struct C : public B<T> {
  using B<T>::B;
};

template <typename T>
struct D : public B<T> {};

C c(42); // C++23:OK, C<int>に推論される
D d(42); // エラー!推論失敗。推論補助が継承されていない

B(int) -> B<char>; // 推論補助を追加定義
C c2(42); // OK。C<char>に推論される

template <typename T>
struct E : public B<int> {
  using B<int>::B;
};

E e(42); // エラー!推論失敗。Eのテンプレート引数を推論補助から推論できない

派生クラスもテンプレート引数をもつ場合:

template <typename T, typename U, typename V>
struct F {
  F(T, U, V);
};

template <typename T, typename U>
struct G : F<U, T, int> {
  using G::F::F;
};

G g(true, 'a', 1); // OK。G<char, bool>に推論される

関連項目

参照