关于模板的模板参数有关问题

关于模板的模板参数问题头文件内容:#include deque#include stdexcept#include memorytemplate typ

关于模板的模板参数问题
头文件内容:
#include <deque>
#include <stdexcept>
#include <memory>

template <typename T, 
template <typename ELEM, 
typename = std::allocator<ELEM> >
class CONT = std::deque>
class Stack
{
private:
CONT<T> elems;
public:
void push(T const &);
void pop();
T top() const;
bool empty() const
{
return elems.empty();
}

template<typename T2,
template<typename ELEM2,
typename = std::allocator<ELEM2>
>class CONT2>
Stack<T, CONT>& operator= (Stack<T2, CONT2> const &);
};

template <typename T, template<typename, typename> class CONT>
void Stack<T, CONT>::push(T const &elem)
{
elems.push_back(elem);
}

template <typename T, template<typename, typename> class CONT>
void Stack<T, CONT>::pop()
{
if(elems.empty())
{
throw std::out_of_range("Stack<>::pop() : stack is empty");
}
elems.pop_back();
}


template <typename T, template<typename, typename> class CONT>
T Stack<T, CONT>::top()const
{
if(elems.empty())
{
throw std::out_of_range("Stack<T,CONT>::top() : empty stack");
}
return elems.back();
}

template <typename T, template<typename, typename> class CONT>
template <typename T2, template<typename, typename> class CONT>
Stack<T, CONT>&
Stack<T, CONT>::operator= (Stack<T2, CONT> const &op2)
{
if( (void*)this == (void*)&op2 )
{
return *this;
}

Stack<T2, CONT> tmp(op2);

elems.clear();

while(!tmp.empty())
{
elems.push_back(tmp.top());
tmp.pop();
}

return *this;
}

//.cpp

#include <iostream>
#include "stack4.h"
#include <string>
#include <cstdlib>
#include <vector>

int main()
{
try{
Stack<int>intstack;
}
catch(std::exception const &ex)
{
std::cerr << "Exception : " << ex.what() << std::endl;
}

return 0;
}

帮忙看下, 什么问题??
谢谢了.


[解决办法]
我的代码是编译测试后的代码
在vs2005下是正常的