How do I declare template function outside the class declaration

c++, templates, visual-studio-2008

Solution

You are again missing the typename in the return value. The function should be:

template <class T1, class T2>
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo()
{
    iterator aIter;
    return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false);
}

Problem

``` #include <iterator> #include <map> #include <vector> template <class T1, class T2> class A { public: typedef typename std::vector<std::pair<T1,T2> >::iterator iterator; std::pair<iterator, bool > foo() { iterator aIter; return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false); } }; ``` The above code works fine for me. But I want to move the definition of the function outside the the class declaration. I tried this. ``` template <class T1, class T2> class A { public: typedef typename std::vector<std::pair<T1,T2> >::iterator iterator; std::pair<iterator, bool > foo(); }; template <class T1, class T2> std::pair<std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo() { iterator aIter; return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false); } ``` But it is not compiling. Any Idea how to do this?

Original source