Ваша специализация благодаря параметру по умолчанию
template<>
void Stack<int, std::vector<int>>::pop()
{
cout << "Called Specialized ";
elems_.pop_back();
}
Таким образом, оба следующих вызова вызывают специализацию
Stack<int> mystack1; // Stack<int, std::vector<int>>
mystack1.push(10);
mystack1.pop(); // ---> this calls specialized
Stack<int, vector<int>> mystack2;
mystack2.push(10);
mystack2.pop(); // ---> this calls specialized
, но несоответствующие типы вызовут универсальный:
Stack<int, list<int>> mystack3;
mystack3.push(10);
mystack3.pop(); // ---> this calls generic one
Stack<char> mystack4; // Stack<char, std::vector<char>>
mystack4.push(10);
mystack4.pop(); // ---> this calls generic one