模版
/*这段代码在VS2010通过编译且结果如预期。在gcc下却不能编译。gcc给出的错误:error: dependent-name 'std::iterator_traits::iterator_category' is parsed as a non-type, but instantiation yields a type| 问题在那?*/#include <iostream>#include <string>#include <algorithm>#include <vector>#include <iterator>using namespace std;template <class C>typename iterator_traits<C>::difference_typeDist(C pos1, C pos2){ return Dist(pos1, pos2, iterator_traits<C>::iterator_category() );}template <class Raiterator>typename std::iterator_traits<Raiterator>::difference_typeDist(Raiterator pos1, Raiterator pos2, random_access_iterator_tag) { return pos2 - pos1; }int main(){ vector<int> v; for (int i = 0; i != 10; ++i) v.push_back(i); //distance(v.begin(), v.end() ); cout << Dist(v.begin(), v.end() ) << endl; //foo(v.begin(), v.end());}#include <iostream>#include <string>#include <algorithm>#include <vector>#include <iterator>using namespace std;template <class Raiterator>typename std::iterator_traits<Raiterator>::difference_typeDist(Raiterator pos1, Raiterator pos2, random_access_iterator_tag){ return pos2 - pos1;}template <class C>typename iterator_traits<C>::difference_typeDist(C pos1, C pos2){ return Dist(pos1, pos2, typename iterator_traits<C>::iterator_category());}int main(){ vector<int> v; for(int i = 0; i != 10; ++i) v.push_back(i); //distance(v.begin(), v.end() ); cout << Dist(v.begin(), v.end()) << endl; //foo(v.begin(), v.end());}
[解决办法]