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…

`std::array` is an aggregate

The problem Consider the following type aliasing: template<std::size_t N> using square_matrix = std::array< std::array<int, N>, N>; Intuitively, one may try to use brace-initialization as follows: square_matrix<3> m = { {1, 2, 3}, {4, 5, 6}, {7,…

New value terminology

In this article, Stroustrup explains the origin of the terms glvalue, prvalue and xvalue. Why not LaTeX, btw :-) ?…

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…