News

Little C++ Standard Library Utility: std::align -- Lesley Lai

An introduction of std::align with the arena allocator as motivational example

Little C++ Standard Library Utility: std::align

by Lesley Lai

From the article:

Recently, I learned about std::align, which is one of the lesser-known functions in the C++ standard library because of its limited use cases. Since it is hard to describe without a specific use case, I will use a simple implementation of an arena allocator as a motivational example.

C++20 Concepts: Part 5 (Advanced use cases)--Gajendra Gulgulia

The series continue.

C++20 Concepts: Part 5 (Advanced use cases)

by Gajendra Gulgulia

From the article:

In this article, I’ll explain and demonstrate how to define concepts that constrain multiple template parameters and more importantly how to use them in a generic function. As promised in the part 3 of the series, I’ll explain this using a function comparing for equality of two different types T and U

The Evolutions of Lambdas in C++14, C++17 and C++20--Jonathan Boccara

Are you using them?

The Evolutions of Lambdas in C++14, C++17 and C++20

by Jonathan Boccara

From the article:

Lambdas are one of the most popular features of Modern C++. Since their introduction in C++11, they’ve become ubiquitous in C++ code.

But since their appearance in C++11, they have evolved and gained significant features. Some of those features help write more expressive code, and since using lambdas is so common now, it is worth it to spend time learning what we can do with them.

Our goal here is to cover the major evolutions of lambdas, but not all the little details. A comprehensive coverage of lambdas would be more suited for a book than an article. If you want to dig more, I recommend Bartek’s book C++ Lambda Story, that will tell you everything.

The general evolution of lambdas is to give them able the capabilities of function objects manually defined.

This articles assumes you know the basics of lambdas in C++11. Let’s take it from C++14...

2021-12 Mailing Available

The 2021-12 mailing of new standards papers is now available.

 

WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup
P0493R3 Atomic maximum/minimum Al Grant 2021-12-17 2021-12 P0493R2 SG1 Concurrency and Parallelism
P1467R8 Extended floating-point types and standard names David Olsen 2021-12-16 2021-12 P1467R7 EWG Evolution,LEWG Library Evolution
P1673R6 A free function linear algebra interface based on the BLAS Mark Hoemmen 2021-12-14 2021-12 P1673R5 LEWG Library Evolution
P1774R5 Portable assumptions Timur Doumler 2021-12-16 2021-12 P1774R4 EWG Evolution,CWG Core
P2093R11 Formatted output Victor Zverovich 2021-12-06 2021-12 P2093R10 LWG Library
P2152R1 Querying the alignment of an object Inbal Levi 2021-11-30 2021-12 P2152R0 SG22 Compatability,EWG Evolution
P2173R1 Attributes on Lambda-Expressions Daveed Vandevoorde 2021-12-09 2021-12 P2173R0 All of WG21
P2198R4 Freestanding Feature-Test Macros and Implementation-Defined Extensions Ben Craig 2021-12-13 2021-12 P2198R3 SG10 Feature Test,LEWG Library Evolution
P2248R3 Enabling list-initialization for algorithms Giuseppe D'Angelo 2021-12-17 2021-12 P2248R2 SG6 Numerics,SG9 Ranges,LEWG Library Evolution
P2283R2 constexpr for specialized memory algorithms Michael Schellenberger Costa 2021-11-25 2021-12 P2283R1 LEWG Library Evolution
P2286R4 Formatting Ranges Barry Revzin 2021-12-17 2021-12 P2286R3 LEWG Library Evolution
P2300R3 `std::execution` Michał Dominiak 2021-12-05 2021-12 P2300R2 SG1 Concurrency and Parallelism,LEWG Library Evolution
P2302R2 std::ranges::contains Christopher Di Bella 2021-12-12 2021-12 P2302R1 SG9 Ranges
P2329R0 Move, Copy, and Locality at Scale Pablo Halpern 2021-12-13 2021-12   All of WG21
P2363R2 Extending associative containers with the remaining heterogeneous overloads Konstantin Boyarinov 2021-12-07 2021-12 P2363R1 LEWG Library Evolution
P2374R2 views::cartesian_product Sy Brand 2021-12-13 2021-12 P2374R1 SG9 Ranges,LEWG Library Evolution
P2374R3 views::cartesian_product Sy Brand 2021-12-13 2021-12 P2374R2 LEWG Library Evolution
P2387R3 Pipe support for user-defined range adaptors Barry Revzin 2021-12-17 2021-12 P2387R2 LEWG Library Evolution
P2416R1 Presentation of requirements in the standard library Jens Maurer 2021-12-15 2021-12 P2416R0 LWG Library
P2438R1 std::string::substr() && Federico Kircheis 2021-11-30 2021-12 P2438R0 LEWG Library Evolution
P2440R1 ranges::iota, ranges::shift_left, and ranges::shift_right Tim Song 2021-12-05 2021-12 P2440R0 LWG Library
P2442R1 Windowing range adaptors: views::chunk and views::slide Tim Song 2021-12-05 2021-12 P2442R0 LWG Library
P2447R1 std::span and the missing constructor Federico Kircheis 2021-12-17 2021-12 P2447R0 LEWG Library Evolution
P2455R0 2021 November Library Evolution Poll Outcomes Bryce Adelstein Lelbach 2021-12-08 2021-12   LEWG Library Evolution
P2456R0 2021 December Library Evolution Polls Bryce Adelstein Lelbach 2021-12-08 2021-12   LEWG Library Evolution
P2468R1 The Equality Operator You Are Looking For Barry Revzin, Bjarne Stroustrup, Cameron DaCamara, Daveed Vandevoorde, Gabriel Dos Reis, Herb Sutter, Jason Merrill, Jonathan Caves, Richard Smith, Ville Voutilainen 2021-12-16 2021-12 P2468R0 CWG Core
P2473R1 Distributing C++ Module Libraries Daniel Ruoso 2021-12-02 2021-12 P2473R0 SG15 Tooling
P2474R0 views::repeat Michał Dominiak 2021-12-13 2021-12   SG9 Ranges,LEWG Library Evolution
P2486R1 Structured naming for function object and CPO values Kirk Shoop 2021-12-16 2021-12 P2486R0 LEWG Library Evolution
P2494R0 Relaxing range adaptors to allow for move only types Michał Dominiak 2021-12-13 2021-12   SG9 Ranges,LEWG Library Evolution
P2498R0 Forward compatibility of text_encoding with additional encoding registries Peter Brett 2021-12-13 2021-12   SG16 Unicode,LEWG Library Evolution
P2499R0 string_view range constructor should be explicit James Touton 2021-12-07 2021-12   LEWG Library Evolution
P2501R0 Undo the rename of views::move and views::as_const Ville Voutilainen 2021-12-14 2021-12   LEWG Library Evolution
P2502R0 std::generator: Synchronous Coroutine Generator for Ranges Casey Carter 2021-12-13 2021-12   LEWG Library Evolution
P2504R0 Computations as a global solution to concurrency Lucian Radu Teodorescu 2021-12-11 2021-12   SG1 Concurrency and Parallelism,LEWG Library Evolution
P2505R0 Monadic Functions for std::expected Jeff Garland 2021-12-15 2021-12   LEWG Library Evolution,LWG Library
P2507R0 Only [[assume]] conditional-expressions Peter Brett 2021-12-13 2021-12   EWG Evolution
P2508R0 Exposing std::basic-format-string Barry Revzin 2021-12-17 2021-12   LEWG Library Evolution
P2509R0 A proposal for a type trait to detect value-preserving conversions Giuseppe D'Angelo 2021-12-17 2021-12   SG6 Numerics,LEWG Library Evolution
P2510R0 Formatting pointers Mark de Wever 2021-12-17 2021-12   LWG Library

C++20 Concepts: part 4--Gajendra Gulgulia

The series continue.

C++20 Concepts: part 4

by Gajendra Gulgulia

From the article:

In this issue of the concepts tutorial, I’ll discuss in detail about abbreviated function template syntax , constraining auto with abbreviated function template syntax , constraining deduced return type, i.e. constraining the auto return type with concepts...

Introducing Trunk - A New Meta-Linter for C/C++ (and Dozens of Other Languages) -- David Apirian

Trunk launched its public beta! Trunk combines 30+ linters, static analyzers, and formatters covering dozens of languages to create a one-stop-shop for checking your code.

Trunk Check - Code Quality Solved

by David Apirian

From the article:

Modern repositories include many technologies, each with its own set of linters. With 30+ linters and counting, Trunk makes it dead-simple to identify, install, configure, and run the right linters, static analyzers, and formatters for all your repos. Use the beta for free today.

Itself written in C++, Trunk makes it dead simple to run C++ linters like clang-tidy, adding intelligent caching, easy setup, and a language server for IDE support. Overall, Trunk makes it dead-simple to identify, install, configure, and run the right linters, static analyzers, and formatters for all your repos across multiple languages. Available as a clivscode extension, and github action.

ReSharper C++ 2021.3 release helps upgrade your code to modern C++ -- Elvira Mustafina

ReSharper C++ 2021.3 is now available!

ReSharper C++ 2021.3: Support for Visual Studio 2022, Unreal Engine File Templates, New C++20 and C Features

by Elvira Mustafina

From the article:

Check out the highlights and read the post for more details.

  • Support for Visual Studio 2022. You will enjoy the same rich feature set as in other Visual Studio versions, but since Visual Studio 2022 is an x64 process, all ReSharper C++ features work faster.
  • New C++20 features: auto-completion of designated initializers for aggregate initialization and modernizing inspections to help you adopt new library functions.
  • File templates for Unreal Engine classes.
  • Improved C support: C11 _Generic expressions and the typeof GNU extension.
  • Navigation in goto statements and inactive code.
  • Evaluation results for constant expressions in the Quick Info tooltip.
  • Change Signature lets you control the C++17 [[nodiscard]] attribute.
  • New inspections with quick-fixes, and an update for Clang-Tidy with new checks from Clang 13.