C++ Circular buffer through Circular iterator
High level overview:

The idea is solid, but creating an iterator adapter to make the container behave differently just sounds weird. It would be better to have container adapters, as std::stack&lt;&gt; and std::queue&lt;&gt; do.

Implementation overview:

The code has a serious issues. Mainly the following:


It has a chance to break on some algorithms:

auto second = ++first;



where first is circularIterator&lt;&gt; will make second to be baseIter.  The most dangerous ones are sorting algorithms, especially those that use divide and conquer. The template type parameter is usually only one, e.g. only one type of iterators are allowed, as a result the compiler will issue substitution failure error.


Will not work on idiomatic while (*first++ != last) or similar.


The postfix increment is deleted, thus it disables probably most of the standard library.


The class pretends to be an iterator, but is a range. 


Usually iterator should know about its own internal state only. Knowing end iterator should be last resort. Actually, the reason for storing the range is because the code doesn't provide a function to create a pair of circularIterators. If such function would be provided, the operator==() of parent iterator would still work, as they mostly take it by reference.

Cosmetics:

Not really important, but here they are:


Usually people name types (and classes, as a result) in CamelCase or snake_case. camelCase starting from regular letter are used for variable names. 
Template type parameters are named using CamelCase, since in the future they will probably become Concepts.
Indentation and brace placing is very weird.


Misc:


using namespace std; is bad. It causes name clashes and in general confuses other mechanisms of C++.
std::endl is a performance drainer. If done in a tight loop, can cause serious issues. Bjarne Stroustrup himself didn't use it for a decade.