The following function distinguishes between circulators and iterators. It is based on iterator traits [C++98, Mye95] and Circulator_traits.

#include <CGAL/circulator.h>

template <class I>
Iterator_tag query_circulator_or_iterator ( I i)
if the iterator category of I belongs to an iterator.

template <class C>
Circulator_tag query_circulator_or_iterator ( C c)
if the iterator category of C belongs to a circulator.

See Also

Circulator_tag, Circulator_traits, Assert_circulator, Circulator.