Articles & Books

C++ Ecosystem in 2022: Fast Adoption of C++17 and C++20... -- Anastasia Kazakova

A new year, a new wave of standards adoption...

C++ Ecosystem in 2022: Fast Adoption of C++17 and C++20, C++ Toolset Landscape, and Better Code Analysis Practices

by Anastasia Kazakova

From the article:

... In this post we’ll discuss the final results, review the trends, and learn which direction the C++ community is currently evolving in. We also invite you to read through the key takeaways and detailed data for many programming languages and areas of software development...

C++ standard: developers are moving fast to C++17 and C++20...

Argument-Dependent Lookup and the Hidden Friend Idiom -- Rainer Grimm

You've got to know where to find them, know how to bind them, know when to ask for help, from a hidden friend...

Argument-Dependent Lookup and the Hidden Friend Idiom

by Rainer Grimm

From the article:

Have you ever wondered why the following program works?

#include <iostream>

int main() {
    std::cout << "Hello world";
}

Why should the program not work? The overloaded output operator operator<< is defined in the std namespace. The question is, therefore: How is the appropriate overloaded output operator for std::string found? You may already assume it...

Making C++ primitive types meaningfully movable when they have sentinel values -- Raymond Chen

A little less primitive...

Making C++ primitive types meaningfully movable when they have sentinel values

by Raymond Chen

From the article:

C++ primitive types do not have special semantics for move constructor or move assignment. Their move operations are just copies. But what if you really want them to move, say, because they have a sentinel value that represents an "empty" state...?

Getting in trouble with mixed construction -- Barry Revzin

How do I construct thee? Let me count the ways...

Getting in trouble with mixed construction

by Barry Revzin

From the article:

Several years ago, I wrote a post about the complexities of implementing comparison operators for optional<T>Getting in trouble with mixed comparisons. That post was all about how, even just for ==, making a few seemingly straightforward decisions leads to an ambiguity that different libraries handle differently.

Now is a good time to circle back to that same idea, except this time instead of talking about equality comparison, we’re just going to talk about construction. This post is going to work through a bunch of cases of trying to construct an object of type X from an object of type Y...

 

Partial function application -- Rainer Grimm

PortraintRound-1.jpgAre you a library person (std::function, std::bind, std::bind_front) or a language person (lambdas, auto, currying)? So many tools to get the job done...

Partial function application

by Rainer Grimm

From the article:

A few weeks ago, I had a discussion with a few of my readers. One reader said that I should write about Partial Function Applications. Another reader mentioned that C++ does not support function applications. This is wrong. C++ supports Partial Function Application. Consequently, I am writing today about std::function, std::bind, std::bind_front, lambdas, auto, and currying.

Let me start with a bit of theory...

 

Using perfect (and imperfect) forwarding to simplify C++ wrapper classes -- Raymond Chen

Perfectly imperfect:

Using perfect (and imperfect) forwarding to simplify C++ wrapper classes

by Raymond Chen

From the article:

There may be cases where you have a C++ class that wants to wrap another C++ class that is contained as a member. ... It’s annoying that there’s so much boilerplate to do the method forwarding, and that we have to keep looking up the parameters and return types so that each forwarder has the correct signature. Fortunately, we can use perfect forwarding to write most of them for us: ...

An interview that went viral -- Rainer Grimm

cpp.pngSending us straight into the new year with cash, cars, and games:

An interview that went viral

by Rainer Grimm

From the article:

I gave the interview for the e-finance-blog "efinancialcareers". I essentially stated the following:

  • C++ is heavily used in the finance industry, for game developers, and in the automotive industry.
  • When you want to learn C++, start at least with C++11.
  • C++ is often used to build infrastructure.
  • C++ is too big to fall.

... In total, I got almost 2000 comments. Today, I want to present the main points about the final interview, because this is my motivation for writing articles, posts, and books, recording videos, and teaching and mentoring C++...

Using modules in the big three compilers

With detailed step by step instructions on how to make it work...

Using modules in the big three compilers: a small experiment

 From the article:

The goal of my experiment was to see how easy it is to write code that a) uses C++20 modules, b) can be compiled by GCC, Clang and MSVC without using conditional compilation, c) imports something from the standard library, d) exports at least one templated function, e) has a peculiarity that makes the module harder to find (in my case, the module is named b but the file that contains it is named a.cppm).

The experiment sort of succeeded...