C++-Template-Vererbung und Kopierkonstruktor: Ein rätselhaftes static_assert
2025-06-10
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