April 2022

Local Time--Andrzej KrzemieĊ„ski

Correct time tables.

Local Time

by Andrzej Krzemieński

From the article:

In this post we will see how to solve the task from the previous post, but display the time point in local time instead of system time. The solution is simple and takes only two additional lines (you can scroll down towards the end), but I want to take this opportunity to offer some reflections about the concepts of time zones and daylight saving time...

New C++ features in GCC 12--Marek Polacek

Time to update.

New C++ features in GCC 12

by Marek Polacek

From the article:

Version 12.1 of the GNU Compiler Collection (GCC) is expected to be released in April 2022. Like every major GCC release, this version will bring many additions, improvements, bug fixes, and new features. GCC 12 is already the system compiler in Fedora 36. GCC 12 will also be available on Red Hat Enterprise Linux in the Red Hat Developer Toolset (version 7) or the Red Hat GCC Toolset (version 8 and 9).

Like the article I wrote about GCC 10, this article describes only new features affecting C++.

We implemented several C++23 proposals in GCC 12. The default dialect in GCC 12 is -std=gnu++17; to enable C++23 features, use the -std=c++23 or -std=gnu++23 command-line options. (The latter option allows GNU extensions.)

Note that C++20 and C++23 features are still experimental in GCC 12...

Policy--Rainer Grimm

The series continue.


by Rainer Grimm

From the article:

Thanks to templates, there are new ways of software design. Policies and traits are two commonly used idioms in C++.

The first two keynotes for Meeting C++ 2022

Meeting C++ 2022 will be a hybrid event from Berlin in November this year. Nicolai Josuttis will give the opening keynote and the closing keynote will be by Klaus Iglberger!

Announcing the first two keynotes for Meeting C++ 2022

by Jens Weller

From the article:

Happy to announce the opening and closing keynotes for Meeting C++ 2022!

This years Meeting C++ conference is the 10 year anniversary of Meeting C++ it self. There is of course is a long list of keynote speakers that have or might keynote Meeting C++ in the future. From that long list of possiblities I've chosen Nicolai Josuttis and Klaus Iglberger.


The new Overload is out.


In the journal:

On Becoming Unstuck
By Frances Buontempo
The horsemen of the apocalypse may be on the horizon. Frances Buontempo attempts to stop doom-scrolling and solve problems instead.

Taming Wordle with the Command Line
By James Handley
Could static analysis provide a generic way to approach Wordle? James Handley uses simple command line tools in order to (hopefully) name that Wordle in four!

C++20: A Coroutine Based Stream Parser
By Andreas Fertig
Stream parsing code can be very complicated. Andreas Fertig uses coroutines to make stream parsing code clearer.

Structured Concurrency in C++
By Lucian Radu Teodorescu
Raw threads tend to be unstructured. Lucian Radu Teodorescu applies principles from Structured Programming to concurrency.

The Vector Refactored
By Teedy Deigh
Finding the right level of abstraction can be challenging. Teedy Deigh razes the level of abstraction.

Type Erasure--Rainer Grimm

The series continue.

Type Erasure

by Rainer Grimm

From the article:

Type erasure based on templates is a pretty sophisticated technique. It allows you to bridge dynamic polymorphism (object orientation) with static polymorphism (templates).

Define Concepts--Rainer Grimm

The series continue.

Define Concepts

by Rainer Grimm

From the article:

There are two ways to define a concept: You can combine existing concepts and compile-time predicates, or you can apply a requires expression in four different ways...

2022-04 Mailing Available

The 2022-04 mailing of new standards papers is now available.


WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup
P0429R8 A Standard flat_map Zach Laine 2022-04-18 2022-04 P0429R7 LWG Library
P0957R7 Proxy: A Polymorphic Programming Library Mingxin Wang 2022-04-19 2022-04 P0957R6 LEWGI SG18: LEWG Incubator,LEWG Library Evolution
P1061R2 Structured Bindings can introduce a Pack Barry Revzin 2022-04-22 2022-04 P1061R1 EWG Evolution
P1169R4 static operator() Barry Revzin 2022-04-10 2022-04 P1169R3 CWG Core
P1222R3 A Standard flat_set Zach Laine 2022-04-18 2022-04 P1222R2 LWG Library
P1223R4 find_last Zach Laine 2022-04-15 2022-04 P1223R3 LEWG Library Evolution,LWG Library
P1467R9 Extended floating-point types and standard names David Olsen 2022-04-22 2022-04 P1467R8 CWG Core,LWG Library
P1642R8 Freestanding Library: Easy [utilities], [ranges], and [iterators] Ben Craig 2022-04-13 2022-04 P1642R7 LWG Library
P1673R7 A free function linear algebra interface based on the BLAS Mark Hoemmen 2022-04-14 2022-04 P1673R6 LEWG Library Evolution
P1674R1 Evolving a Standard C++ Linear Algebra Library from the BLAS Mark Hoemmen 2022-04-14 2022-04 P1674R0 LEWG Library Evolution
P1684R2 mdarray: An Owning Multidimensional Array Analog of mdspan Christian Trott 2022-04-24 2022-04 P1684R1 LEWG Library Evolution
P1967R5 #embed - a simple, scannable preprocessor-based resource acquisition method JeanHeyd Meneide 2022-04-13 2022-04 P1967R4 EWG Evolution
P2071R2 Named universal character escapes Tom Honermann 2022-03-27 2022-04 P2071R1 CWG Core
P2093R14 Formatted output Victor Zverovich 2022-03-25 2022-04 P2093R13 LWG Library
P2174R1 Compound Literals Zhihao Yuan 2022-04-15 2022-04 P2174R0 EWG Evolution
P2198R5 Freestanding Feature-Test Macros and Implementation-Defined Extensions Ben Craig 2022-04-13 2022-04 P2198R4 LWG Library
P2266R3 Simpler implicit move Arthur O'Dwyer 2022-03-26 2022-04 P2266R2 CWG Core
P2278R3 cbegin should always return a constant iterator Barry Revzin 2022-04-11 2022-04 P2278R2 LEWG Library Evolution
P2280R4 Using unknown references in constant expressions Barry Revzin 2022-04-10 2022-04 P2280R3 CWG Core
P2286R7 Formatting Ranges Barry Revzin 2022-04-22 2022-04 P2286R6 LEWG Library Evolution
P2300R5 `std::execution` Michał Dominiak 2022-04-22 2022-04 P2300R4 SG1 Concurrency and Parallelism,LEWG Library Evolution
P2302R4 std::ranges::contains Christopher Di Bella 2022-04-16 2022-04 P2302R3 All of WG21
P2305R5 Type inference for object definitions Jens Gustedt 2022-04-08 2022-04 P2305R4 SG22 Compatability
P2322R6 ranges::fold Barry Revzin 2022-04-22 2022-04 P2322R5 LEWG Library Evolution
P2400R3 Library Evolution Report: 2021-09-28 to 2022-01-25 Bryce Adelstein Lelbach 2022-04-21 2022-04 P2400R2 All of WG21
P2408R5 Ranges iterators as inputs to non-Ranges algorithms David Olsen 2022-04-22 2022-04 P2408R4 LWG Library
P2472R2 make function_ref more functional Jarrad J. Waterloo 2022-04-14 2022-04 P2472R1 LEWG Library Evolution
P2505R2 Monadic Functions for std::expected Jeff Garland 2022-04-15 2022-04 P2505R1 LEWG Library Evolution,LWG Library
P2510R2 Formatting pointers Mark de Wever 2022-04-14 2022-04 P2510R1 LWG Library
P2538R1 ADL-proof std::projected Arthur O'Dwyer 2022-04-01 2022-04 P2538R0 LEWG Library Evolution,LWG Library
P2539R1 Should the output of std::print to a terminal be synchronized with the underlying stream? Victor Zverovich 2022-04-11 2022-04 P2539R0 LEWG Library Evolution
P2542R1 views::concat Hui Xie 2022-03-28 2022-04 P2542R0 SG9 Ranges,LEWG Library Evolution
P2546R1 Debugging Support René Ferdinand Rivera Morell 2022-04-10 2022-04 P2546R0 LEWG Library Evolution
P2559R0 Plan for Concurrency Technical Specification Version 2 Bryce Adelstein Lelbach 2022-04-01 2022-04   SG1 Concurrency and Parallelism,EWG Evolution,LEWG Library Evolution
P2573R0 = delete("should have a reason"); Yihe Li 2022-04-14 2022-04   EWGI SG17: EWG Incubator,EWG Evolution
P2574R0 2022-05 Library Evolution Polls Bryce Adelstein Lelbach 2022-04-22 2022-04   LEWG Library Evolution
P2576R0 The constexpr specifier for object definitions Jens Gustedt 2022-04-08 2022-04   SG22 Compatability
P2577R0 C++ Modules Discovery in Prebuilt Library Releases Daniel Ruoso 2022-04-11 2022-04   SG15 Tooling