Default constructed iterators as past-the-end iterators

Starting from C++14 we have that: A value-initialized ForwardIterator behaves like the past-the-end iterator of some unspecified empty container: it compares equal to all value-initialized ForwardIterators of the same type. This answer on SO explains this well: Forward iterators and stronger are generally just a lightweight handle onto something…

On the relationship between special functions

Prior to C++11, all of the special members functions were totally independent. If you declare or don’t declare any one of the default constructor, the copy constructor, the copy assignment operator, or the destructor, that has no effect whatsoever on the other three. But when C++11 introduced…

Implicit move constructor

In C++11 it was decided that the compiler will implicitly generate move constructor as member-wise moves, unless you have explicitly defined a copy constructor or copy/move assignment or a destructor. The goal was to achieve a balance between breaking some of existing code and providing useful optimizations based…