Método de plantilla de especialización de clase de plantilla

Aquí está mi código:

template<typename T1, typename T2> class MyClass
{
public:
    template<int num> static int DoSomething();
};

template<typename T1, typename T2> template<int num> int MyClass<T1, T2>::DoSomething()
{
    cout << "This is the common method" << endl;
    cout << "sizeof(T1) = " << sizeof(T1) << endl;
    cout << "sizeof(T2) = " << sizeof(T2) << endl;
    return num;
}

Funciona bien. Pero cuando trato de agregar esto

template<typename T1, typename T2> template<> int MyClass<T1, T2>::DoSomething<0>()
{
    cout << "This is ZERO!!!" << endl;
    cout << "sizeof(T1) = " << sizeof(T1) << endl;
    cout << "sizeof(T2) = " << sizeof(T2) << endl;
    return num;
}

Obtengo errores del compilador: especialización explícita no válida antes de «>» token template-id «DoSomething <0>» para «int MyClass :: DoSomething ()» no coincide con ninguna declaración de plantilla

Uso g ++ 4.6.1 ¿Qué debo hacer?

Respuestas a la pregunta(6)

Su respuesta a la pregunta