如何在VC6和VC9中进行此模板类编译

Shi*_*C G 2 c++ templates visual-studio-2008

我在VC6中有一个很好的模板类编译.但它没有在VC9中编译.为此,我在一种类型的前面添加了"typename"关键字.在此之后,它在vc9中编译,但在VC6中不编译.如何使用两个编译器进行编译.

#include <map> 
#include <vector>

template <class T1, class T2>
class A
{
public:
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
};

template <class T1, class T2>
std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in)
{
    std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b;
    return b;
}

void main()
{
    A<int, int> a;
    a.insert(std::pair<int, int>(0, 0));
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在VC6中编译.但不是在VC9中.以下代码适用于VC9,而不适用于VC6.

#include <map> 
#include <vector>

template <class T1, class T2>
class A
{
public:
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
};

template <class T1, class T2>
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in)
{
    std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b;
    return b;
}

void main()
{
    A<int, int> a;
    a.insert(std::pair<int, int>(0, 0));
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 5

VC6不是很符合标准.您可能只需#IFDEF就可以绕过这个.