News

2019-06 pre-Cologne mailing available (1 of 2)

The 2019-06 mailing of new standards papers is now available.

WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
N4814 2019 Belfast Meeting Invitation and Information Jamie Allsop 2019-06-16 2019-06 WG21
N4815 Cologne Agenda John Spicer 2019-06-04 2019-06 WG21
N4816 WG21 telecon meeting: Pre-Cologne Herb Sutter 2019-06-01 2019-06 WG21
N4817 2020 Prague Meeting Invitation and Information Hana Dusíková 2019-06-17 2019-06 WG21
N4818 Working Draft, C++ Extensions for Reflection David Sankel 2019-06-17 2019-06 N4766 WG21
N4819 Reflection TS - Editor's Report David Sankel 2019-06-17 2019-06 WG21
N4820 Working Draft, Standard for Programming Language C++ Richard Smith 2019-06-18 2019-06 N4810 WG21
N4821 Editors' Report - Programming Languages - C++ Richard Smith, Thomas Koeppe, Jens Maurer, Dawn Perchik 2019-06-18 2019-06 WG21
P0037R7 Fixed-Point Real Numbers John McFarlane 2019-06-17 2019-06 P0037R6 SG6, LEWGI
P0237R10 Wording for fundamental bit manipulation utilities Vincent Reverdy, Robert J. Brunner 2019-06-17 2019-06 P0237R9 Library
P0267R9 A Proposal to Add 2D Graphics Rendering and Display to C++ Michael B. McLaughlin, Herb Sutter, Jason Zink, Guy Davidson, Michael Kazakov 2019-06-17 2019-06 P0267R8 SG13
P0288R4 any_invocable Ryan McDougall, Matt Calabrese 2019-06-19 2019-06 P0228R3 Library Evolution, Library
P0323R8 std::expected JF Bastien, Vicente Botet 2019-06-16 2019-06 P0323R7 Library
P0330R6 Literal Suffixes for ptrdiff_t and size_t JeanHeyd Meneide, Rein Halbersma 2019-06-17 2019-06 P0330R4 Evolution
P0401R1 Providing size feedback in the Allocator interface Chris Kennelly, Jonathan Wakely 2019-06-16 2019-06 P0401R0 Library Evolution, Library
P0429R7 A Standard flat_map Zach Laine 2019-06-13 2019-06 P0429R6 Library
P0466R4 Layout-compatibility and Pointer-interconvertibility Traits Lisa Lippincott 2019-06-17 2019-06 P0466R3 Core, Library
P0533R5 constexpr for and Oliver Rosten, Edward Rosten 2019-06-17 2019-06 P0533R4 Library
P0554R1 Composition of Arithmetic Types John McFarlane 2019-06-17 2019-06 P0554R0 SG6, LEWGI
P0592R1 To boldly suggest an overall plan for C++23 Ville Voutilainen 2019-06-17 2019-06 P0592R0 WG21
P0593R4 Implicit creation of objects for low-level object manipulation Richard Smith 2019-06-17 2019-06 P0593R3 Core, Library Evolution, Library
P0631R7 Math Constants Lev Minkovsky, John McFarlane 2019-06-16 2019-06 P0631R6 Library
P0642R2 The Concurrent Invocation Library Mingxin Wang, Wei Chen 2019-06-17 2019-06 P0642R1 SG1, Library Evolution, Library
P0645R9 Text Formatting Victor Zverovich 2019-06-16 2019-06 P0645R7 Library
P0652R3 Concurrent associative data structure with unsynchronized view Sergey Murylev, Anton Malakhov, Antony Polukhin 2019-06-14 2019-06 P0652R2 SG1
P0707R4 Metaclasses: Generative C++ Herb Sutter 2019-06-17 2019-06 P0707R3 SG7
P0709R3 Zero-overhead deterministic exceptions: Throwing values Herb Sutter 2019-06-15 2019-06 P0709R2 Evolution, Library Evolution
P0735R1 Interaction of memory_order_consume with release sequences Will Deacon, Jade Alglave 2019-06-17 2019-06 P0735R0 Core
P0784R6 More constexpr containers Daveed Vandevoorde, Peter Dimov,Louis Dionne, Nina Ranns, Richard Smith, Daveed Vandevoorde 2019-06-17 2019-06 P0784R5 Core, Library
P0792R4 function_ref: a non-owning reference to a Callable Vittorio Romeo 2019-06-17 2019-06 P0792R3 Library Evolution
P0797R2 Handling Concurrent Exceptions with Executors Matti Rintala, Michael Wong, Carter Edwards, Patrice Roy, Gordon Brown, Mark Hoemmen 2019-06-17 2019-06 P0797R1 SG1, SG14
P0848R2 Conditionally Trivial Special Member Functions Barry Revzin, Casey Carter 2019-06-16 2019-06 P0848R1 Core
P0849R1 auto(x): decay-copy in the language Zhihao Yuan 2019-06-17 2019-06 P0849R0 EWGI, Library Evolution
P0876R6 fiber_context - fibers without scheduler Oliver Kowalke, Nat Goodspeed 2019-06-17 2019-06 P0876R5 SG1
P0881R5 A Proposal to add stacktrace library Antony Polukhin, Antony Polukhin 2019-06-14 2019-06 P0881R4 Core, Library
P0901R4 Size feedback in operator new Chris Kennelly, Andrew Hunter 2019-06-16 2019-06 P0901R3 Evolution
P0917R2 Making operator?: overloadable Matthias Kretz 2019-06-17 2019-06 P0917R1 EWGI
P0939R3 Direction for ISO C++ H. Hinnant, R. Orr, B. Stroustrup, D. Vandevoorde, M. Wong 2019-06-17 2019-06 P0939R2 WG21
P0943R3 Support C atomics in C++ Hans Boehm 2019-06-17 2019-06 P0943R2 SG1, Library Evolution
P0957R2 PFA: A Generic, Extendable and Efficient Solution for Polymorphic Programming Mingxin Wang 2019-06-17 2019-06 P0957R1 SG7, Library Evolution, Library
P1021R4 Filling holes in Class Template Argument Deduction Mike Spertus, Timur Doumler, Richard Smith 2019-06-17 2019-06 P1021R3 Core
P1028R2 SG14 status_code and standard error object for P0709 Zero-overhead deterministic exceptions Niall Douglas 2019-06-16 2019-06 P1028R1 SG14, LEWGI, Library Evolution
P1029R2 move = relocates Niall Douglas 2019-06-16 2019-06 P1029R1 EWGI, Evolution
P1030R2 std::filesystem::path_view Niall Douglas 2019-06-16 2019-06 P1030R1 LEWGI, Library Evolution
P1031R2 Low level file i/o library Niall Douglas 2019-06-16 2019-06 P1031R1 SG1, SG14, LEWGI, Library Evolution
P1035R6 Input Range Adaptors Christopher Di Bella, Casey Carter, Corentin Jabot 2019-06-17 2019-06 P1035R5 Library
P1050R1 Fractional Numeric Type John McFarlane 2019-06-17 2019-06 P1050R0 SG6, LEWGI
P1065R1 constexpr INVOKE Tomasz Kamiński, Barry Revzin 2019-06-16 2019-06 P1065R0 Library
P1068R1 Vector API for random number generation Ilya Burylov, Pavel Dyakov, Ruslan Arutyunyan, Andrey Nikolaev 2019-06-14 2019-06 P1068R0 SG1
P1072R4 basic_string::resize_default_init Chris Kennelly, Mark Zeren 2019-06-17 2019-06 P1072R3 Library Evolution, Library
P1083R3 Move resource_adaptor from Library TS to the C++ WP Pablo Halpern 2019-06-15 2019-06 P1083R2 Library
P1108R2 web_view Hal Finkel 2019-06-17 2019-06 P1108R1 SG13, LEWGI
P1115R0 Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if Marc Mutz 2019-06-17 2019-06 Library
P1116R0 Re-Gaining Exclusive Ownership from shared_ptrs Marc Mutz 2019-06-17 2019-06 SG1, Library Evolution
P1132R4 out_ptr - a scalable output pointer abstraction JeanHeyd Meneide, Todor Buyukliev, Isabella Muerte 2019-06-17 2019-06 P1132R3 Library
P1135R5 The C++20 Synchronization Library David Olsen, Olivier Giroux, JF Bastien, Detlef Vollmann, Bryce Lelbach 2019-06-17 2019-06 P1135R4 Library
P1144R4 Object relocation in terms of move plus destroy Arthur O'Dwyer 2019-06-17 2019-06 P1144R3 EWGI, LEWGI
P1152R3 Deprecating volatile JF Bastien 2019-06-15 2019-06 P1152R2 Core, Library
P1155R3 More implicit moves Arthur O'Dwyer, David Stone 2019-06-17 2019-06 P1155R2 Core
P1172R1 The Concept of Memory Allocator Mingxin Wang 2019-06-17 2019-06 P1172R0 Library Evolution, Library
P1186R2 When do you actually use <=>? Barry Revzin 2019-06-17 2019-06 P1186R1 Core
P1202R2 Asymmetric Fences David Goldblatt 2019-06-17 2019-06 P1202R1 Library Evolution
P1207R2 Movability of Single-pass Iterators Corentin Jabot 2019-06-17 2019-06 P1207R1 Library
P1208R5 Adopt source location from Library Fundamentals V3 for C++20 Corentin Jabot, Robert Douglas 2019-06-17 2019-06 P1208R4 Library
P1217R2 Out-of-thin-air, revisited, again Hans Boehm 2019-06-17 2019-06 P1217R1 SG1
P1222R2 A Standard flat_set Zach Laine 2019-06-11 2019-06 P1222R1 Library
P1223R2 find_backward Zach Laine 2019-06-13 2019-06 P1223R1 Library
P1238R1 SG16: Unicode Direction Tom Honermann, Corentin Jabot, JeanHeyd Meneide, Mark Zeren, Martinho Fernandes, Peter Bindels, Steve Downey, Zach Laine 2019-06-16 2019-06 P1238R0 WG21
P1255R4 A view of 0 or 1 elements: view::maybe Steve Downey 2019-06-17 2019-06 P1255R3 Library Evolution
P1272R2 Byteswapping for fun&&nuf Isabella Muerte 2019-06-17 2019-06 P1272R1 Core, Library
P1280R2 Integer Width Literals Isabella Muerte 2019-06-17 2019-06 P1280R1 Library Evolution
P1301R3 [[nodiscard("should have a reason")]] JeanHeyd Meneide, Isabella Muerte 2019-06-17 2019-06 P1301R2 Core
P1315R2 secure_clear Miguel Ojeda 2019-06-17 2019-06 P1315R1 Evolution
P1320R2 Allowing contract predicates on non-first declarations Ville Voutilainen 2019-06-17 2019-06 P1320R1 Evolution
P1331R1 Permitting trivial default initialization in constexpr contexts CJ Johnson 2019-06-14 2019-06 P1331R0 Core
P1355R2 Exposing a narrow contract for ceil2 Chris Kennelly 2019-06-16 2019-06 P1355R1 SG6, Library Evolution, Library
P1361R1 Integration of chrono with text formatting Victor Zverovich , Daniela Engert, Howard E. Hinnant 2019-06-14 2019-06 P1361R0 Library
P1367R1 Not All Agents Have TLS Olivier Giroux 2019-06-17 2019-06 P1367R0 SG1
P1371R1 Pattern Matching Sergei Murzin, Michael Park, David Sankel, Dan Sarginson 2019-06-17 2019-06 P1371R0 Evolution
P1385R2 A proposal to add linear algebra support to the C++ standard library Guy Davidson, Bob Steagall 2019-06-19 2019-06 P1385R1 SG6, SG14, Library Evolution
P1386R2 A Standard Audio API for C++: Motivation, Scope, and Basic Design Timur Doumler, Guy Somberg, Guy Davidson 2019-06-18 2019-06 P1386R1 SG13, Library Evolution
P1391R2 Range constructor for std::string_view Corentin Jabot 2019-06-17 2019-06 P1391R1 Library Evolution, Library
P1394R2 Range constructor for std::span Corentin Jabot, Casey Carter 2019-06-17 2019-06 P1394R1 Library
P1401R1 Narrowing contextual conversions to bool Andrzej Krzemieński 2019-06-17 2019-06 P1401R0 Evolution
P1404R1 bad_alloc is not out-of-memory! Andrzej Krzemieński, Tomasz Kamiński 2019-06-17 2019-06 P1404R0 Evolution, Library Evolution
P1406R1 Add more std::hash specializations Alexander Zaitsev, Antony Polukhin 2019-06-14 2019-06 P1406R0 LEWGI, Library Evolution, Library
P1412R0 Class Natures for Safety Critical Code: On user-declared and user-defined special member functions Peter Sommerlad 2019-06-17 2019-06 SG12, SG20
P1413R1 Deprecate std::aligned_storage and std::aligned_union CJ Johnson 2019-06-14 2019-06 P1413R0 Library Evolution, Library
P1415R1 SG19 Machine Learning Layered List Michael Wong, Vincent Reverdy, Ritwik Dubey, Richard Dosselmann, Eugenio Bargiacchi 2019-06-16 2019-06 P1415R0 SG19
P1424R1 'constexpr' feature macro concerns Antony Polukhin 2019-06-14 2019-06 P1424R0 Library
P1429R2 Contracts That Work Joshua Berne, John Lakos 2019-06-16 2019-06 P1429R1 Evolution
P1436R1 Executor properties for affinity-based execution Gordon Brown, Ruyman Reyes, Michael Wong, H. Carter Edwards, Thomas Rodgers, Mark Hoemmen 2019-06-17 2019-06 P1436R0 SG1, SG14, Library Evolution
P1450R1 Enriching type modification traits Vincent Reverdy 2019-06-17 2019-06 P1450R0 Library Evolution
P1466R2 Miscellaneous minor fixes for chrono Howard Hinnant 2019-06-17 2019-06 P1466R1 Library
P1467R1 Extended floating-point types Michał Dominiak, David Olsen 2019-06-17 2019-06 P1467R0 SG6, Evolution, Library Evolution
P1468R1 Fixed-layout floating-point type aliases Michał Dominiak, Boris Fomitchev, Sergei Nikolaev 2019-06-17 2019-06 P1468R0 SG6, Evolution, Library Evolution
P1485R1 Better keywords for the Coroutines Antony Polukhin 2019-06-14 2019-06 P1485R0 Evolution
P1522R0 Iterator Difference Type and Integer Overflow Eric Niebler 2019-06-17 2019-06 Library Evolution, Library
P1523R0 Views and Size Types Eric Niebler 2019-06-17 2019-06 Library Evolution, Library
P1525R0 One-Way execute is a Poor Basis Operation Eric Niebler, Kirk Shoop, Lewis Baker, Lee Howes 2019-06-17 2019-06 SG1, Library Evolution
P1604R1 The inline keyword is not in line with the design of modules Corentin Jabot 2019-06-17 2019-06 P1604R0 SG2, Evolution
P1609R1 C++ Should Support Just-in-Time Compilation Hal Finkel 2019-06-18 2019-06 P1609R0 EWGI
P1614R1 The Mothership Has Landed: Adding <=> to the Library Barry Revzin 2019-06-17 2019-06 P1614R0 Library
P1622R1 Mandating the Standard Library: Clause 31 - Thread support library Daniel Sunderland 2019-06-17 2019-06 P1622R0 Library
P1624R0 Resolving technical issues in parameter mapping equivalence and related problems Hubert S.K. Tong 2019-06-17 2019-06 Core
P1628R0 Unicode characters properties Corentin Jabot 2019-06-17 2019-06 SG16
P1629R0 Standard Text Encoding The Phantom Derpstorm 2019-06-17 2019-06 SG16
P1630R0 Spaceship needs a tune-up: Addressing some discovered issues with P0515 and P1185 Barry Revzin 2019-06-16 2019-06 Evolution, Core
P1633R0 Amendments to the C++20 Synchronization Library David Olsen, Olivier Giroux 2019-06-16 2019-06 SG1
P1634R0 Naming guidelines for modules Corentin Jabot 2019-06-17 2019-06 SG15
P1635R0 A Design for an Inter-Operable and Customizable Linear Algebra Library Jayesh Badwaik 2019-06-16 2019-06 SG14
P1636R0 Formatters for library types Lars Gullik Bjønnes 2019-06-14 2019-06 Library Evolution
P1638R0 basic_istream_view's iterator should not be copyable Corentin Jabot, Christopher Di Bella 2019-06-17 2019-06 Library Evolution, Library
P1639R0 Unifying source_location and contract_violation Corentin Jabot 2019-06-17 2019-06 Library Evolution, Library

"Allegro" Means Both Fast and Happy. Coincidence? - Andrei Alexandrescu

The Italian C++ Conference 2019 keynote:

"Allegro" Means Both Fast and Happy. Coincidence?

by Andrei Alexandrescu

About the video:

Sorting and searching. Two fundamental tasks in Computer Science, and definitely among the most studied. Efficient algorithms for sorting and searching are now taught in core undergraduate classes. Are they at their best, or is there more blood to squeeze from that stone? This talk will explore a few less known – but more allegro! – variants of classic algorithms.

Meeting C++ 2019: vote on the talks!

See which talks have been submitted, and help to decide which make it to the conference:

The voting on which talks should make it to Meeting C++ 2019 has begun

by Jens Weller

From the article:

With today, you can start to vote on all 120 submitted talks for Meeting C++ 2019!

With 120 talks submitted by 82 speakers, there is a lot to vote on. You don't have to vote on all talks, the order of talks is randomized, so as long as enough folks vote on a few talks, every talk should get a fair number of votes. You can vote for every talk between 0 - 5, where 5 is the best vote you can give. Also its possible to leave a comment and feedback for the speaker. The deadline to cast your votes is the last day of June.

CopperSpice: C++ ISO Standard

New video on the CopperSpice YouTube Channel:

C++ ISO Standard

by Barbara Geller and Ansel Sermersheim

About the video:

This was an interesting video for us since it covers how the C++ Standard is developed and the ISO process. We encourage everyone to watch this video and hope you gain an appreciation as we discovered for the work the committee members do on our behalf.

Please take a look and remember to subscribe!

Generic Interfaces with Generic Lambdas using C++ for SYCL—Georgi Mirazchiyski

This blog post offers a generic description of using lambdas in C++ and how it's possible to use them with SYCL, an open standard interface for programming heterogeneous hardware using C++.

Generic Interfaces with Generic Lambdas using C++ for SYCL

by Georgi Mirazchiyski

From the article:

C++ Lambdas, first introduced in C++11, are an important part of the way that the SYCL standard is defined and implemented. SYCL is required to handle different types and pass around functions so lambdas are a good fit allowing anonymous function objects to be passed to SYCL kernels. We talk about how we use lambdas in our guides and documentation, but never about how lambdas work or even how to use them in SYCL, so in this blog post we will examine how they can be used in SYCL.

CppCast Episode 201: Pattern Matching with Michael Park

Episode 201 of CppCast the first podcast for C++ developers by C++ developers. In this episode Rob and Jason are joined by Michael Park to discuss his Pattern Matching library and standards proposal.

CppCast Episode 201: Pattern Matching with Michael Park

by Rob Irving and Jason Turner

About the interviewee:

Michael Park is a software engineer at Facebook, working on the C++ libraries and standards team. His focus for C++ is to introduce pattern matching to facilitate better code.

Kadane in next-gen C++—Marco Arena

A new interpretation of a classical problem:

Kadane in next-gen C++

by Marco Arena

From the article:

We, programmers, get better results while thinking in patterns. We decompose complex problems in combinations of simpler patterns. However, many problems cannot be solved with known patterns. Here is where creativity kicks in...

Quick Q: Differences between std::make_unique and std::unique_ptr with new

Quick A: mostly for exception safety.

Recently on SO:

Differences between std::make_unique and std::unique_ptr with new

The motivation behind make_unique is primarily two-fold:

make_unique is safe for creating temporaries, whereas with explicit use of new you have to remember the rule about not using unnamed temporaries.

foo(make_unique<T>(), make_unique<U>()); // exception safe

foo(unique_ptr<T>(new T()), unique_ptr<U>(new U())); // unsafe*

The addition of make_unique finally means we can tell people to 'never' use new rather than the previous rule to "'never' use new except when you make a unique_ptr".

There's also a third reason:

make_unique does not require redundant type usage. unique_ptr<T>(new T()) -> make_unique<T>()

None of the reasons involve improving runtime efficiency the way using make_shared does (due to avoiding a second allocation, at the cost of potentially higher peak memory usage).