テンプレートを用いる際、引数として与えられた型があるコンセプトを満たすかどうかによって、
異なるテンプレートを用いることはできるでしょうか?

例えば、
template<typename T>
class foo
{
 //Tがコンテナの要件を満たしてなければこの実装
};
template<typename T>
class foo
{
 //Tがコンテナの要件を満たしていればこの実装
};
という感じのコードを書きたいと思っていますが、
やはりredefinition of 'class foo<T>'と怒られます。
上手く解決する方法はありますか?