次のような階層を表す必要があります。
template<typename T>
struct X
{
};
template<typename Derived = void>
struct Y : Y<void>
{
//Note: not trying to use SFINAE here
using DerivedType = typename std::enable_if<std::is_base_of<Y, Derived>::value, Derived>::type;
};
template<>
struct Y<void> : X<Y<void>>
{
};
struct Z : Y<Z>
{
};
Z と Y<void> の両方がインスタンス化可能である必要があります。
W<Y<>> wy;
W<Z> wz;
すべての Y<T> は Y<void> のインスタンスである必要があり、可能であれば、それを機能させるために 2 つの異なる名前を持たないようにしたいと考えています。(それが私の最後の手段です)
問題は、これを機能させる方法がわからないことです。上記のコードは明らかに意図したとおりに動作せず、コンパイルされません。私がそれを機能させる方法はありますか、または私がすでに述べたもの以外の代替案はありますか?