C++中iterator_traits为什么会报这个错误(非类型视为类型)?

图片说明

代码说明:想通过iterator_traits来根据迭代器的类型选择不同的重载函数。报错的行是函数返回值,想根据iterator_traits中的difference_type来自动获取迭代器的类型作为返回值。

但是报了非类型视作类型的错误

template<class RandomAccessIterator>
inline iterator_traits<RandomAccessIterator>::difference_type
__distance(RandomAccessIterator first, RandomAccessIterator, random_access_iterator_tag)
{
    cout << "random_access_iterator_tag";
}

template<class BidirectionIterator>
inline iterator_traits<BidirectionIterator>::difference_type
__distance(BidirectionIterator first, BidirectionIterator, bidirectional_iterator_tag)
{
    cout << "bidirectional_iterator_tag";
}

template<class iterator>
inline iterator_traits<iterator>::difference_type
distance(iterator first, iterator second)
{
    iterator_trait<iterator>::iterator_category category;
    __distance(first, second, category());
}

在此先谢谢各位了!

https://blog.csdn.net/p2016/article/details/72794990