#include <cstdlib>
#include <iostream>
#include <vector>
using namespace std;
template<typename in,typename out>
void Copy(in infirst,in inlast,out outfirst)
{
for(;infirst != inlast;infirst++,outfirst++){
*outfirst = *infirst;
}
}
class NullType;
template<typename T>
class TypeTraits
{
private:
template<typename U>struct TypePanDuan{
enum{result = false};
typedef NullType ResPointee;
};
template<typename U>struct TypePanDuan<U*>{
enum{result = true};
typedef U* ResPointee;
};
public:
enum{IsPointer = TypePanDuan<T>::result};
typedef typename TypePanDuan<T>::ResPointee ResPointee;
};
int main(int argc, char *argv[])
{
/*TypeTraits<int> aa;
//TypeTraits<int>::ResPointee b;//这句是要出错的
TypeTraits<int*>::ResPointee b = new int(255);
cout<<*b<<endl;*/
bool IsIterPtr = TypeTraits<vector<int>::iterator>::IsPointer;
cout<<"vector<int>::iterator is "<< (IsIterPtr ? "yes" : "no") <<'/n';
system("PAUSE");
return EXIT_SUCCESS;
}