struct input_iterator_tag {};
template<class T>
struct Iterator
{
typedef T Tag;
};
template <class T>
class InputIterator:public Iterator<input_iterator_tag>
{
};
template <typename Iterator, typename Distance>
void Advance(Iterator& i, Distance di, input_iterator_tag)
{
}
template <typename Iterator>
struct IteratorTrait
{
typedef typename Iterator::Tag IteratorTag;
};
template <typename Iterator, typename Distance>
void Advance(Iterator& i, Distance di )
{
Advance(i,di,typename IteratorTrait<Iterator>::IteratorTag());
}
InputIterator<int> it;
Advance(it,10);
template<class T>
struct Iterator
{
typedef T Tag;
};
template <class T>
class InputIterator:public Iterator<input_iterator_tag>
{
};
template <typename Iterator, typename Distance>
void Advance(Iterator& i, Distance di, input_iterator_tag)
{
}
template <typename Iterator>
struct IteratorTrait
{
typedef typename Iterator::Tag IteratorTag;
};
template <typename Iterator, typename Distance>
void Advance(Iterator& i, Distance di )
{
Advance(i,di,typename IteratorTrait<Iterator>::IteratorTag());
}
InputIterator<int> it;
Advance(it,10);