shared_ptrのコンストラクタはN2800では以下のようになってますが
template <class T> class shared_ptr { public: template <class Y> explicit shared_ptr(Y* p); };
YはDerivedFromコンセプトで制約しておいたほうがいいんじゃないかな
template <class T> class shared_ptr { public: template <class Y> requires DerivedFrom<Y, T> explicit shared_ptr(Y* p); };
カスタム削除子もCallableコンセプトで制約したほうがいいですね。
shared_ptr自体がまだコンセプトに対応してないからなんだろうけど。
ん、DerivedFromで制約したらshared_ptr