шаблон класса - специализация функции-члена

Вот пример кода:

template<class T>
class A
{
public:
   A(T t): x(t){}
   T getX();
private:
   T x;
};

template<class T>
T A<T>::getX()
{
   return x;
}

// member function specialization
template<> // works with and without template<> 
long A<long>::getX()
{
   return 1000L;
}

Приведенный выше код работает с и безШаблон <> до специализации функции члена. Почему ? Какая разница в таком случае?

Edit1: Я использую этот шаблон таким образом (компилятор VS 2012):

A<int> a1(1);
cout<<a1.getX()<<endl;
A<long> a2(1);
cout<<a2.getX()<<endl;

Ответы на вопрос(1)

Ваш ответ на вопрос