Шаблонный метод специализации шаблонного класса

Вот мой код:

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;
}

Он работает хорошо. Но когда я пытаюсь добавить это

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;
}

я получаю ошибку компилятора: invalid explicit specialization before ">" token template-id "DoSomething<0>" для "int MyClass::DoSomething()" не соответствует ни одному объявлению шаблона

Я использую g++ 4.6.1. Что мне делать?

10
задан antpetr89 14 February 2012 в 11:54
поделиться