> class Single : public singleton<Single>
この形自体は問題ない。
ただしこの形の場合singletonの中でSingleの(完全な)定義が必要なものを使っていたらだめ。

template<class T> class Base
{
// T t; // だめ
// enum { E = sizeof(T) }; // だめ
T * pt;
T func() { return T(); };
void func2( T t ) {};
};

class Deri: public Base<Deri> {};

int main()
{
Deri d;
return 0;
}