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

履歴 編集

抽象型のチェック(C++20)

概要

C++17までは以下の仕様があったため、抽象クラスに早期の制限があった:

抽象クラスは、パラメータ型、関数の戻り値型、明示的型変換の型として使用してはならない。抽象クラスへのポインタや参照は宣言できる。

しかし、先行宣言したクラスは、あとで定義が追加されるために、パラメータ型、関数の戻り値型、明示的型変換の型として使用できる。

struct S;
S f(); // OK: 抽象性はここではチェックされない

struct S { virtual void f() = 0; };
S f(); // エラー!抽象クラスは関数の戻り値型として使用できない

C++20ではこれを適格とし、先行宣言と同様にクラスの完全性のチェックは、定義と呼び出しまで先送りすることとする。

参照