Да, задачки Вы ставите, однако :) После некоторого исследования и "копания" в стандарте пришел к выводу, что метод-шаблон может быть специализирован только для ранее специализированного класса-шаблона, содержащего этот метод.
Именно поэтому конструкция
template<> template<> void base<int>::test<int>()
{
}
работает (имеется специализация класса base). По той же причине gcc и запрещает специализацию метода-шаблона внутри класса.
VS закрывает на это глаза, но требует определения специализации метода внутри класса, т.к. синтаксически внешнее определение любого метода класса-шаблона должно начинаться с template<class Type>, а не с template<>.
Кстати, по поводу предыдущего вопроса. Я встретил таки сточку в стандарте об этом:
"An explicit specialization declaration shall not be a friend declaration."
Вот так.
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!