C++-Template-Vererbung und Kopierkonstruktor: Ein rätselhaftes static_assert

2025-06-10
C++-Template-Vererbung und Kopierkonstruktor: Ein rätselhaftes static_assert

Dieser Artikel untersucht ein rätselhaftes Problem bezüglich Kopierkonstruktor in der C++-Template-Vererbung. Die Klasse `Derived` erbt von der Klasse `Base`, deren Kopierkonstruktor gelöscht ist. `Derived` definiert jedoch seinen eigenen Kopierkonstruktor. Obwohl dieser Konstruktor versucht, das nicht kopierbare `Base`-Objekt zu kopieren, gibt `std::is_copy_constructible` trotzdem true zurück. Das liegt daran, dass der Compiler nur die Existenz eines nicht gelöschten Kopierkonstruktors überprüft, nicht aber seine Instanziierbarkeit. Der Autor bespricht außerdem die Unterschiede zwischen explizit und implizit definierten Kopierkonstruktoren und die Auswirkungen des Auslagerns der Definition des Kopierkonstruktors.

Entwicklung Kopierkonstruktor