Deterministic Disappointment—Niall Douglas

All the ways past, present and future that one can disappoint deterministically in C++.

Deterministic Disappointment

by Niall Douglas

Content of the talk:

1. What is disappointment?
2. What is determinism?
3. The direction of C++
4. Future disappointment in C++?
5. Achieving the future today
   a. C++ 11 system_error
   b. C++ 11 P1028 SG14 status_code
   c. C++ 14 (Boost.) Outcome


The case for Auto Non-Static Data Member Initializers—Corentin Jabot

The case for Auto Non-Static Data Member Initializers

By Corentin Jabot


From the article:

In this article, we talk about Auto Non-Static Data Member Initializers in C++. All code snippet can be tested on Compiler Explorer thanks to Matt Godbolt.

In fact, the main motivation for this article is to put this feature in the hand of people to prove that it works and that it would be a great addition to the standard.

Codeplay Announces World’s First Fully-Conformant SYCL 1.2.1 Solution

SYCL is an open standard developed by the Khronos™ Group that enables developers to write code for heterogeneous systems using standard C++.  Developers are looking at how they can accelerate their applications without having to write optimized processor specific code. SYCL is the industry standard for C++ acceleration, giving developers a platform to write high-performance code in standard C++, unlocking the performance of accelerators and specialized processors from companies such as AMD™, Intel™, Renesas™ and Arm®.

Codeplay Announces World's First Fully-Conformant SYCL 1.2.1 Solution

by Codeplay

About the release:

Codeplay's ComputeCpp 1.0 enables SYCL and provides C++ developers with huge benefits:
    High Performance Computing: Supercomputers are playing an important role in computationally intensive tasks in the fields of science, finance, and many others to provide complex calculations and simulations. SYCL offers a standard way for HPC developers to write portable, efficient, accelerated code using standard C++ that can be deployed to GPUs, FPGAs and other accelerators
    Computer Vision: Complex image processing operations can be accelerated using parallel computing. ComputeCpp and SYCL provide high-level programmability for custom vision processors, enabling additional custom features on top of existing optimized hardware functions
    Artificial Intelligence: Linear algebra is increasingly being used in artificial intelligence applications and benefits from parallel architectures. The Eigen linear algebra library, SYCLBLAS and TensorFlow frameworks can be accelerated using ComputeCpp for a wide variety of heterogeneous hardware

Results summary: C++ Foundation Developer Survey “Lite”, 2018-08: C++ and Cloud

Over the past week, we ran our second global C++ developer survey, this time focusing on C++ use in cloud-related workloads.

Thank you to everyone who responded. As promised, here is a public summary of the results:


This summary has now been forwarded to the C++ standards committee, along with the full text of your write-in answers. Your feedback will be very helpful, and thank you again for your participation!

C++ Foundation Developer Survey “Lite”, 2018-08: C++ and Cloud

cpp_logo.pngThank you to the over 3,000 people who participated six months ago in the Standard C++ Foundation's first-ever global C++ developer survey. Based on its success, we have decided to run these surveys about twice a year to learn about C++ usage generally across industries or in specific current domains.

This time, we focus on the domain of cloud-related software. As the name suggests, it's a one-pager:

C++ Developer Survey "Lite", 2018-08: C++ and Cloud

Please take 10 minutes or so to participate! A summary of the results, including aggregated highlights of common answers in the write-in responses, will be posted publicly here on and shared with the C++ standardization committee to help inform C++ evolution.

The survey will be open for one week.

Thank you for participating and helping to inform our committee and community.

Announcing “trivially relocatable”—Arthur O’Dwyer

Do you want this?

Announcing “trivially relocatable”

by Arthur O’Dwyer

From the article:

Frequent users of Compiler Explorer, a.k.a., may have noticed that a few days ago a new compiler appeared in its dropdown menu. “x86-64 clang (experimental P1144)” is a branch of Clang which I have patched to support the concept of “trivially relocatable types,” as described in my C++Now 2018 talk and as proposed for standardization in my upcoming paper P1144 “Object relocation in terms of move plus destroy” (coauthored with Mingxin Wang)...

Trip report: Summer ISO C++ standards meeting (Rapperswil)—Herb Sutter

Contracts, concepts, and C++20, oh my!

Trip report: Summer ISO C++ standards meeting (Rapperswil)

by Herb Sutter

From the article:

Top news: Contracts adopted for C++20

... In my opinion, contracts is the most impactful feature of C++20 so far, and arguably the most impactful feature we have added to C++ since C++11. That statement might surprise you, so let me elaborate why I think so...

2018-06 post-Rapperswil mailing available

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


WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
2018-06 post-Rapperswil
N4751 WG21 pre-Rapperswil telecon minutes Nina Dinka Ranns 2018-05-25 2018-06 WG21
N4752 Responses to National Body Comments for ISO/IEC PDTS 19750, C++ Extensions for Parallelism Version 2 Bryce Adelstein Lelbach 2018-06-08 2018-06 WG21
N4753 WG21 2018-06 Rapperswil Minutes Nina Dinka Ranns 2018-12-06 2018-06 WG21
N4754 Rapperswil 2018 LEWG Summary Titus Winters 2018-06-12 2018-06 WG21
N4755 Working Draft, C++ Extensions for Parallelism Version 2 Jared Hoberock 2018-06-24 2018-06 N4744 WG21
N4756 Parallelism TS Editor’s Report, post-Rapperswil mailing Jared Hoberock 2018-06-26 2018-06 WG21
N4757 Programming Languages - C++ Extensions for Parallelism Version 2 Jared Hoberock 2018-06-24 2018-06 WG21
N4758 Working Draft, C++ Extensions for Library Fundamentals, Version 3 Thomas Köppe 2018-06-25 2018-06 N4617 WG21
N4759 Editor’s Report: C++ Extensions for Library Fundamentals, Version 3 Thomas Köppe 2018-06-25 2018-06 WG21
N4760 Working Draft, C++ Extensions for Coroutines Gor Nishanov 2018-06-24 2018-06 N4736 WG21
N4761 Editor's report for the Coroutines TS Gor Nishanov 2018-06-24 2018-06 WG21
P0009r7 mdspan: A Non-Owning Multidimensional Array Reference H. Carter Edwards, Bryce Adelstein Lelbach, Daniel Sunderland, David Hollman, Christian Trott, Mauro Bianco, Ben Sander, Athanasios Iliopoulos, John Michopoulos, Mark Hoemmen 2018-06-24 2018-06 P0009r6 Library
P0019r8 Atomic Ref Daniel Sunderland, H. Carter Edwards, Hans Boehm, Olivier Giroux, Mark Hoemmen, David Hollman, Bryce Adelstein Lelbach, Jens Maurer 2018-06-07 2018-06 P0019r7 Library Adopted 2018-06
P0267r8 A Proposal to Add 2D Graphics Rendering and Display to C++ Michael B. McLaughlin, Herb Sutter, Jason Zink, Guy Davidson, Michael Kazakov 2018-06-26 2018-06 P0267r7 WG21
P0323r7 std::expected Vicente Botet, JF Bastien 2018-06-22 2018-06 P0323r6 Library
P0357R2 'reference_wrapper' for incomplete types Tomasz Kamiński, Stephan T. Lavavej, Alisdair Meredith 2018-06-10 2018-06 P0357R1 Library
P0388R3 Permit conversions to arrays of unknown bound Robert Haberlach 2018-06-24 2018-06 P0388R2 Core
P0458R2 Checking for Existence of an Element in Associative Containers Mikhail Maltsev 2018-06-06 2018-06 P0458R1 Library Adopted 2018-06
P0475R1 LWG 2511: guaranteed copy elision for piecewise construction Jonathan Wakely 2018-06-05 2018-06 P0475R0 Library Adopted 2018-06
P0476R2 Bit-casting object representations JF Bastien 2017-11-10 2018-06 P0476R1 Library Adopted 2018-06
P0482R4 char8_t: A type for UTF-8 characters and strings Tom Honermann 2018-06-16 2018-06 P0482R3 Library
P0483R2 static_vector Gonzalo Brito Gadeschi 2018-06-25 2018-06 P0483R1 Library
P0528R3 The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange JF Bastien, Michael Spencer 2018-06-07 2018-06 P0528R2 Core Adopted 2018-06
P0542R5 Support for contract based programming in C++ J. Daniel Garcia 2018-06-08 2018-06 P0542R4 Core Adopted 2018-06
P0556R3 Integral power-of-2 operations Jens Maurer 2018-06-06 2018-06 P0556R2 Library Adopted 2018-06
P0602R3 variant and optional should propagate copy/move triviality Zhihao Yuan 2018-06-13 2018-06 P0602R2 Library
P0619R4 Reviewing Deprecated Facilities of C++17 for C++20 Alisdair Meredith, Alisdair Meredith, Tomasz Kamiński 2018-06-08 2018-06 P0619R3 Core, Library Adopted 2018-06
P0631R3 Math Constants Lev Minkovsky, John McFarlane 2018-06-08 2018-06 P0631R2 SG6, Library Evolution
P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list Marc Mutz 2018-06-08 2018-06 P0646R0 Library Adopted 2018-06
P0660R3 A Cooperatively Interruptible Joining Thread Nicolai Josuttis, Herb Sutter, Anthony Williams 2018-06-06 2018-06 P0660R2 SG1, Library Evolution, Library
P0664R4 C++ Coroutine TS Issues Gor Nishanov 2018-06-07 2018-06 P0664R3 Evolution, Core, Library Evolution Adopted 2018-06
P0664R5 C++ Coroutine TS Issues Gor Nishanov 2018-06-24 2018-06 P0664R4 Core
P0668R4 Revising the C++ memory model Hans-J. Boehm, Olivier Giroux, Viktor Vafeiades 2018-06-24 2018-06 P0668R3 Core, Library
P0670R4 Function reflection Matúš Chochlík, Axel Naumann, David Sankel 2018-06-08 2018-06 P0670R3 Core, Library Adopted 2018-06
P0709R1 Zero-overhead deterministic exceptions: Throwing values Herb Sutter 2018-06-20 2018-06 P0709R0 Evolution, Library Evolution
P0722R3 Efficient sized delete for variable sized classes Richard Smith, Andrew Hunter 2018-03-17 2018-06 P0722R2 Core, Library Adopted 2018-06
P0732R2 Class Types in Non-Type Template Parameters Jeff Snyder, Louis Dionne 2018-06-06 2018-06 P0732R1 Evolution Adopted 2018-06
P0758R1 Implicit conversion traits and utility functions Daniel Krügler 2018-06-06 2018-06 P0758R0 Library Adopted 2018-06
P0759R1 fpos requirements Daniel Krügler 2018-06-04 2018-06 P0759R0 Library Adopted 2018-06
P0769R2 Add shift to <algorithm> Dan Raviv 2018-06-06 2018-06 P0769R1 Library Adopted 2018-06
P0771R0 std::function move operations should be noexcept Nevin Liber 2017-10-16 2018-06 Library
P0784R4 More constexpr containers Louis Dionne, Richard Smith, Nina Ranns, Daveed Vandevoorde 2018-06-22 2018-06 P0784R3 Core, Library
P0788R3 Standard Library Specification in a Concepts and Contracts World Walter E. Brown 2018-06-07 2018-06 P0788R2 Library Adopted 2018-06
P0805R2 Comparing Containers Marshall Clow 2018-06-22 2018-06 P0805R1 Library
P0806R2 Deprecate implicit capture of this via [=] Thomas Köppe 2018-06-04 2018-06 P0806R1 Core Adopted 2018-06
P0820R4 Feedback on P0214 Tim Shen, Matthias Kretz 2018-06-08 2018-06 P0820R3 Library Adopted 2018-06
P0828R1 Elastic Integers John McFarlane 2018-06-25 2018-06 P0828R0 SG6, SG12, SG14
P0876R3 fiber_handle - fibers without scheduler Oliver Kowalke, Nat Goodspeed 2018-06-08 2018-06 P0876R2 Library Evolution
P0883R1 Fixing Atomic Initialization Nicolai Josuttis 2018-06-05 2018-06 P0883R0 SG1, Library Evolution, Library
P0887R1 The identity metafunction Timur Doumler 2018-03-18 2018-06 P0887R0 Library Adopted 2018-06
P0892R2 explicit(bool) Barry Revzin, Stephan T. Lavavej 2018-06-08 2018-06 P0892R1 Core, Library Adopted 2018-06
P0896R2 The One Ranges Proposal Eric Niebler, Casey Carter, Christopher Di Bella 2018-06-25 2018-06 P0896R1 Library Evolution, Library
P0898R3 Standard Library Concepts Casey Carter, Eric Niebler 2018-06-08 2018-06 P0898R2 Library Adopted 2018-06
P0907R3 Signed Integers are Two’s Complement JF Bastien 2018-06-10 2018-06 P0907R2 Core
P0912R2 Merge Coroutines TS into C++20 working draft Gor Nishanov 2018-06-08 2018-06 P0912R1 WG21 Adopted 2018-06
P0919R2 Heterogeneous lookup for unordered containers Mateusz Pusz 2018-06-11 2018-06 P0919R1 Library
P0921R2 Standard Library Compatibility Titus Winters, Ashley Hedberg 2018-05-06 2018-06 P0921R1 Evolution, Library Evolution
P0927R1 Towards A (Lazy) Forwarding Mechanism for C++ James Dennett, Geoff Romer 2018-05-16 2018-06 P0927R0 Evolution
P0929R2 Checking for abstract class types Jens Maurer 2018-06-06 2018-06 P0929R1 Core Adopted 2018-06
P0941R2 Integrating feature-test macros into the C++ WD Ville Voutilainen, Jonathan Wakely 2018-06-08 2018-06 P0941R1 Core, Library Adopted 2018-06
P0964R2 Finding the right set of traits for simd<T> Matthias Kretz 2018-06-07 2018-06 P0964R1 Library Evolution Adopted 2018-06
P0985R1 LWG Chair post-meeting report Marshall Clow 2018-06-19 2018-06 P0985R0 WG21
P0995R1 Improving atomic_flag JF Bastien, Olivier Giroux, Andrew Hunter 2018-06-22 2018-06 P0995R0 Library
P1000R1 C++ IS schedule Herb Sutter 2018-06-21 2018-06 P1000R0 WG21
P1007R1 std::assume_aligned Timur Doumler, Chandler Carruth 2018-06-25 2018-06 P1007R0 Library
P1008R1 Prohibit aggregates with user-declared constructors Timur Doumler, Arthur O’Dwyer, Richard Smith, Howard E. Hinnant, Nicolai Josuttis 2018-06-08 2018-06 P1008R0 Evolution, Core Adopted 2018-06
P1013R1 Explicit concept expressions Thomas Köppe, Hubert S.K. Tong 2018-06-10 2018-06 P1013R0 WG21
P1018R1 Evolution status after Rapperswil 2018 Ville Voutilainen 2018-06-09 2018-06 P1018R0 WG21
P1023R0 constexpr comparison operators for std::array Tristan Brindle 2018-05-06 2018-06 Library Evolution Adopted 2018-06
P1024R1 Usability Enhancements for std::span Tristan Brindle 2018-06-24 2018-06 P1024R0 Library Evolution
P1025R1 Update The Reference To The Unicode Standard Steve Downey, JeanHeyd Meneide, Martinho Fernandes 2018-06-07 2018-06 P1025R0 SG16, Core, Library Adopted 2018-06
P1030R1 std::filesystem::path_view Niall Douglas 2018-06-18 2018-06 P1030R0 Library Evolution
P1033R1 Rangify the uninitialised memory algorithms! Casey Carter, Christopher Di Bella 2018-06-25 2018-06 P1033R0 Library Evolution
P1040R1 std::embed JeanHeyd Meneide 2018-06-06 2018-06 P1040R0 Evolution, Library Evolution
P1041R1 Make char16_t/char32_t string literals be UTF-16/32 R. Martinho Fernandes 2018-06-15 2018-06 P1041R0 Evolution
P1042R1 __VA_OPT__ wording clarifications Hubert S.K. Tong 2018-06-04 2018-06 P1042R0 Core Adopted 2018-06
P1053R1 Future-proofing continuations for executors Lee Howes, Eric Niebler 2018-06-24 2018-06 P1053R0 SG1, Library Evolution
P1064R0 Allowing Virtual Function Calls in Constant Expressions Peter Dimov, Vassil Vassilev 2018-05-04 2018-06 Evolution Adopted 2018-06
P1073R1 constexpr! functions Richard Smith, Andrew Sutton, Daveed Vandevoorde 2018-06-22 2018-06 P1073R0 Core
P1076R1 Editorial clause reorganization Jens Maurer 2018-06-23 2018-06 P1076R0 Core, Library
P1082R0 C++ Standard Library Issues to be moved in Rapperswil Marshall Clow 2018-05-06 2018-06 WG21 Adopted 2018-06
P1085R1 Should Span be Regular? Tony Van Eerd 2018-05-04 2018-06 P1085R0 Evolution
P1097R0 Named character escapes R. Martinho Fernandes 2018-06-21 2018-06 SG16, Evolution, Core
P1097R1 Named character escapes R. Martinho Fernandes 2018-06-22 2018-06 P1097R0 SG16, Evolution, Core
P1099R0 Using Enum Gašper Ažman, Jonathan Müller 2018-05-23 2018-06 SG1, Library Evolution
P1100R0 Efficient composition with DynamicBuffer Vinnie Falco 2018-06-18 2018-06 Library Evolution
P1102R0 Down with ()! Alex Christensen, JF Bastien 2018-06-20 2018-06 Core
P1103R0 Merging Modules Richard Smith, Gabriel Dos Reis 2018-06-22 2018-06 WG21
P1105R0 Leaving no room for a lower-level language: A C++ Subset Ben Craig 2018-06-21 2018-06 SG14, Evolution
P1108R0 web_view Hal Finkel 2018-06-22 2018-06 Library Evolution
P1109R0 WG21 2018-06 Rapperswil Record of Discussion Nina Dinka Ranns 2018-06-12 2018-06 WG21
P1110R0 A placeholder with no name Jeffrey Yasskin, JF Bastien 2018-06-07 2018-06 Evolution
P1111R0 Resolutions to NB Comments on the Parallelism TS v2 Bryce Adelstein Lelbach, Matthias Kretz 2018-06-04 2018-06 SG1, Library Evolution, Library Adopted 2018-06
P1113R0 Core Language Working Group "ready" Issues for the June, 2018 (Rapperswil) meeting William M. Miller 2018-06-08 2018-06 WG21 Adopted 2018-06
P1114R0 Core Language Working Group "tentatively ready" Issues for the June, 2018 (Rapperswil) meeting William M. Miller 2018-06-05 2018-06 WG21 Adopted 2018-06
P1118R0 Concat and Split on simd<> objects Tim Shen, Matthias Kretz 2018-06-08 2018-06 Library Adopted 2018-06
P1119R0 ABI for std::hardware_{constructive,destructive}_interference_size JF Bastien, Olivier Giroux, Olivier Giroux, Hal Finkel, Thomas Rodgers, Matthias Kretz 2018-06-22 2018-06 SG1, Library Evolution, Library
P1120R0 Consistency improvements for <=> and other comparison operators Richard Smith 2018-06-08 2018-06 Core Adopted 2018-06
P1122R0 Proposed Wording for Concurrent Data Structures: Read-Copy-Update (RCU) Paul McKenney, Michael Wong, Maged M. Michael, Geoffrey Romer, Andrew Hunter, Arthur O'Dwyer, David S. Hollman, JF Bastien, Hans Boehm, David Goldblatt, Frank Birbacher 2018-06-07 2018-06 Library Evolution, Library
P1128R0 Summer 2018 WG21 Batavia LWG Meeting Information Walter E. Brown 2018-06-21 2018-06 Library
P1131R0 Core Issue 2292: simple-template-id is ambiguous between class-name and type-name Jens Maurer 2018-06-23 2018-06 Core
P1132R0 out_ptr - a scalable output pointer abstraction JeanHeyd Meneide, Todor Buyukliev, Isabella Muerte 2018-06-25 2018-06 Library Evolution, Library
P1133R0 Networking TS Associations For Call Wrappers Vinnie Falco 2018-06-21 2018-06 Library Evolution
P1135R0 The C++20 Synchronization Library Bryce Adelstein Lelbach, Olivier Giroux, JF Bastien 2018-06-12 2018-06 SG1, Library Evolution, Library
P1136R0 2018-09 Bellevue ad-hoc meeting information Herb Sutter 2018-06-21 2018-06 WG21
P1137R0 SG16: Unicode meeting summaries 2018/05/16 - 2018/06/20 Tom Honermann 2018-06-24 2018-06 SG16
P1141R0 Yet another approach for constrained declarations Ville Voutilainen, Thomas Köppe, Andrew Sutton, Herb Sutter, Gabriel Dos Reis, Bjarne Stroustrup, Jason Merrill, Hubert Tong, Eric Niebler, Casey Carter, Tom Honermann, Erich Keane 2018-06-23 2018-06 Evolution
P1142R0 Thoughts on a conservative terse syntax for constraints Thomas Köppe 2018-06-25 2018-06 Evolution

Botond Ballo’s Rapperswil trip report

A summary of what happened at the recent Rapperswil C++ standards meeting, with a focus on the Evolution Working Group.

Trip Report: C++ Standards Meeting in Rapperswil, June 2018

by Botond Ballo

From the article:

A couple of weeks ago I attended a meeting of the ISO C++ Standards Committee (also known as WG21) in Rapperswil, Switzerland. This was the second committee meeting in 2018; you can find my reports on preceding meetings here (March 2018, Jacksonville) and here (November 2017, Albuquerque), and earlier ones linked from those. These reports, particularly the Jacksonville one, provide useful context for this post.

At this meeting, the committee was focused full-steam on C++20, including advancing several significant features — such as Ranges, Modules, Coroutines, and Executors — for possible inclusion in C++20, ...