C++26のstd::polymorphicがclone()地獄を終わらせる
Composite objects and C++26 the std:polymorphic type
C++26に追加されるstd::polymorphicは、動的な型を持つメンバーを値として所有するクラスを劇的に単純化する。従来はunique_ptrとvirtualなclone()でコピーを実装する必要があり、派生クラスでのclone()忘れがスライシングを招くなどの問題があった。std::polymorphicは構築時にコピー操作を型消去して保持するため、Rule of Zeroのままコピー可能で、constも伝播し、null状態も存在しない。
std::polymorphicのコピーコンストラクタは、保存された操作を呼び出すだけだ。これはstd::functionやstd::anyが使っているのと同じ手法を、コピーコンストラクタに応用したものだ。