template <class S, class EXTRA0, class T, class EXTRA1>
class Foo
{
void bar();
};
template <class S, class T>
void Foo<S, T>::bar()
{ /* Generic stuff */ }
struct SomeType {};
template <>
void Foo<SomeType, SomeType>::bar()
{ /* Some special function */ }