traits的一个例子,vc6可以通过,2010无法编译解决方法

traits的一个例子,vc6可以通过,2010无法编译
有vs2010的童鞋帮忙试试,我的这代码来自网络, 是一个traits的例子,2010无法通过

vc6可以通过, 郁闷死了


C/C++ code
#include "stdafx.h"
#include<iostream>
using namespace std;
class CIntArray
{
private:
    int a[10];
public:
    CIntArray()
    {
        for(int i=0;i<10;i++)
        {
            a[i]=i+1;
        }
    }
    int GetSum(int times);
};


int CIntArray::GetSum(int times)
{
    int sum=0;
    for(int i=0;i<10;i++)
    {
        sum+=a[i];
    }
    return sum*times;
}


class CFloatArray
{
private:
    float f[10];
public:
    CFloatArray()
    {
        for(int i=1;i<=10;i++)
        {
            f[i-1]=1.0f/i;
        }
    }
    float GetSum(float times);
};


float CFloatArray::GetSum(float times)
{
    float sum=0.0f;
    for(int i=0;i<10;i++)
    {
        sum+=f[i];
    }
    return sum*times;
}




//定义基本模板类
template<class T>
class NumTraits
{
};

//模板特化  将返回类型和输入参数都定义成相同的名称,为编制模板类共同的调用接口做准备 
template<>
class NumTraits<CIntArray>
{
public:
    typedef int resulttype;
    typedef int inputpara;
};

template<>
class NumTraits<CFloatArray>
{
public:
    typedef float resulttype;
    typedef float inputpara;
};


template<class T>
class CApply
{
    typedef NumTraits<T>::resulttype result;
    typedef NumTraits<T>::inputpara input;

public:

    result GetSum(T& t, input inpara)
    {
        return t.GetSum(inpara);
    }
};


int main()
{
    CIntArray intary;
    CFloatArray fltary;
//    cout<<"整型数组的和3倍是:"<<intary.GetSum(3)<<endl;
//    cout<<"浮点数组和3.2倍是:"<<fltary.GetSum(3.2f)<<endl;
  //  CApply<CIntArray> c1;
 //   CApply<CFloatArray> c2;
  //  cout<<"整型数组的和3倍是:"<<c1.GetSum(intary,3)<<endl;
   // cout<<"浮点数组和3.2倍是:"<<c2.GetSum(fltary,3.2f)<<endl;
    return 0;
}


------解决方案--------------------
试试
typedef typename NumTraits<T>::resulttype result;
typedef typename NumTraits<T>::inputpara input;