Articles & Books

C++20: Coroutines - A First Overview--Rainer Grimm

They will change a lot of things.

C++20: Coroutines - A First Overview

by Rainer Grimm

From the article:

C++20 provides four features that change the way we think about and write modern C++: concepts, the ranges library, coroutines, and modules. I already wrote a few posts to concepts and the ranges library. Let's have a closer look at coroutines...

C++20: Python's map Function--Rainer Grimm

The series continue.

C++20: Python's map Function

by Rainer Grimm

From the article:

Today, I finish my experiment writing beloved Python functions in C++. So far, I implemented the Python functions filter, range, and xrange. Today, I have a closer look at the map function and combine the functions map and filter into one function...

Literal classes as non-type template parameters in C++20 -- Kevin Hartman

Using user-defined literal classes as non-type template parameters in C++20.

Literal classes as non-type template parameters in C++20

by Kevin Hartman


From the article:

* Prints whether or not a value was provided for "maybe" WITHOUT branching smile
template<OptionalInt maybe>
void Print() {
    if constexpr(maybe.has_value) {
        std::cout << "Value is: " << maybe.value << std::endl;
    } else {
        std::cout << "No value." << std::endl;


C++ Packaging and Design Rules -- John Lakos

In this excerpt from Large-Scale C++ Volume I: Process and Architecture, John Lakos presents how to organize and package component-based software in a uniform (domain-independent) manner. This chapter also provides the fundamental C++ design rules that govern how to develop modular software hierarchically in terms of components, packages, and package groups.

C++ Packaging and Design Rules

by John Lakos 

From the article:

The way in which software is organized governs the degree to which we can leverage that software to solve current and new business problems quickly and effectively. By design, much of the code that we write for use by applications will reside in sharable libraries and not directly in any one application. Our goal, therefore, is to provide some top-level organizational structure that allows us to partition our software into discrete physical units so as to facilitate finding, understanding, and potentially reusing available software solutions.