C++テンプレート継承とコピーコンストラクタ:不可解なstatic_assert
2025-06-10

この記事では、C++テンプレート継承におけるコピーコンストラクタに関する不可解な問題について解説しています。`Derived`クラスは`Base`クラスを継承しますが、`Base`クラスのコピーコンストラクタは削除されています。しかし、`Derived`クラスは独自のコピーコンストラクタを定義しています。このコンストラクタはコピー不可能な`Base`オブジェクトをコピーしようとしますが、`std::is_copy_constructible`はそれでもtrueを返します。これは、コンパイラが削除されていないコピーコンストラクタの存在のみをチェックし、インスタンス化可能性はチェックしないためです。さらに、明示的に定義されたコピーコンストラクタと暗黙的に定義されたコピーコンストラクタの違い、およびコピーコンストラクタの定義をインライン化しないことの影響についても説明します。
開発
コピーコンストラクタ