February 2018

CppCast Episode 138: API & ABI Versioning with Mathieu Ropert

Episode 138 of CppCast the only podcast for C++ developers by C++ developers. In this episode Rob and Jason are joined by Mathieu Ropert to discuss C++ API & ABI compatibility issues and Modern CMake.

CppCast Episode 138: API & ABI Versioning with Mathieu Ropert

by Rob Irving and Jason Turner

About the interviewee:

Mathieu is a french C++ expert with an eclectic background. He's worked in various fields including kernels, virtualization, web development, databases, REST microservices, build systems and package management, all those in (or about) C or C++. He is presently awaiting his next challenge in the video game industry that should come up next May in Stockholm, Sweden. Until then, Mathieu lives and works in Paris, France where he is also host of the C++ French User Group.

2018-02 pre-Jacksonville mailing available

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


WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
SD-1 2018 PL22.16/WG21 document list Hal Finkel 2018-02-12 2018-02
2018-02 pre-Jacksonville
N4715 2018-11 San Diego Meeting Information Marshall Clow 2018-02-01 2018-02 WG21
N4716 PL22.16/WG21 draft agenda: 12-17 March 2018, Jacksonville, FL, US John Spicer 2018-01-12 2018-02 WG21
N4717 WG21 telecon meeting: Pre-Jacksonville Herb Sutter 2018-01-10 2018-02 WG21
N4718 WG21 telecon meeting: Modules TS publication Herb Sutter 2018-01-18 2018-02 WG21
N4719 Programming Languages — Extensions to C++ for Modules Gabriel Dos Reis 2018-01-29 2018-02 WG21
N4720 Working Draft, Extensions to C++ for Modules Gabriel Dos Reis 2018-01-29 2018-02 N4689 WG21
N4721 Editor’s Report for the Module TS Gabriel Dos Reis 2018-02-12 2018-02 WG21
N4722 Responses to SC22 N5250, ISO/IEC PDTS 21544, C++ Extensions for Modules Barry Hedquist 2018-02-04 2018-02 WG21
N4723 Working Draft, C++ Extensions for Coroutines Gor Nishanov 2018-02-11 2018-02 N4680 WG21
N4724 Editor's report for the Coroutines TS Gor Nishanov 2018-02-06 2018-02 WG21
N4725 Working Draft, Technical Specification for C++ Extensions for Parallelism Version 2 Jared Hoberock 2018-02-12 2018-02 N4706 WG21
N4726 Parallelism TS Editor’s Report Jared Hoberock 2018-02-12 2018-02 WG21
N4727 Working Draft, Standard for Programming Language C++ Richard Smith 2018-02-12 2018-02 N4713 WG21
N4728 Editors' Report -- Programming Languages – C++ Richard Smith, Dawn Perchik, Thomas Köppe 2018-02-12 2018-02 WG21
P0009R5 Polymorphic Multidimensional Array Reference H. Carter Edwards, Daniel Sunderland, David Hollman, Christian Trott, Mauro Bianco, Ben Sander, Athanasios Iliopoulos, John Michopoulos 2018-02-10 2018-02 P0009R4 Library
P0019r6 Atomic View H. Carter Edwards, Hans Boehm, Olivier Giroux, James Reus 2018-02-11 2018-02 P0019R5 Library
P0051R3 C++ generic overload function Vicente J. Botet Escribá 2018-02-12 2018-02 P0051R2 Library Evolution
P0058r8 Working Draft, C++ Extensions for Coroutines Gor Nishanov 2018-02-11 2018-02 P0058R7 WG21
P0122r6 span: bounds-safe views for sequences of objects Neil MacIntosh 2018-02-11 2018-02 P0122R5 Library
P0194R5 Static reflection Matúš Chochlík, Axel Naumann, David Sankel 2018-02-11 2018-02 P0194R4 Core, Library
P0201R3 A polymorphic value-type for C++ Jonathan Coe, Sean Parent 2018-02-12 2018-02 P0201R2 Library
P0214r8 Data-Parallel Vector Types & Operations Matthias Kretz 2018-02-12 2018-02 P0214r7 Library
P0267r7 A Proposal to Add 2D Graphics Rendering and Display to C++ Michael B. McLaughlin, Herb Sutter, Jason Zink, Guy Davidson 2018-02-10 2018-02 P0267r6 Library Evolution
P0275R3 A Proposal to add Classes and Functions Required for Dynamic Library Load Antony Polukhin 2018-02-01 2018-02 P0275R2 Library Evolution
P0323R5 std::expected Vicente Botet, JF Bastien 2018-02-08 2018-02 P0323R4 Library
P0332R2 Relaxed Incomplete Multidimensional Array Type Declaration H. Carter Edwards, Daniel Sunderland, Christian Trott, David Hollman, Mauro Bianco, Athanasios Iliopoulos, John Michopoulos 2018-02-10 2018-02 P0332R1 Library Evolution
P0338R3 C++ generic factories Vicente J. Botet Escribá 2018-02-12 2018-02 P0338R2 Library Evolution
P0355R5 Extending <chrono> to Calendars and Time Zones Howard E. Hinnant, Tomasz Kamiński 2018-02-11 2018-02 P0355R4 Library
P0443R5 A Unified Executors Proposal for C++ Jared Hoberock, Michael Garland, Chris Kohlhoff, Chris Mysen, Carter Edwards, Gordon Brown 2018-02-12 2018-02 P0443R4 SG1, Library Evolution
P0458R1 Checking for Existence of an Element in Associative Containers Mikhail Maltsev 2018-02-06 2018-02 P0458R0 Library
P0466R1 Layout-compatibility and Pointer-interconvertibility Traits Lisa Lippincott 2018-02-12 2018-02 P0466R0 Core, Library
P0479R4 Proposed wording for likely and unlikely attributes Clay Trychta 2018-02-07 2018-02 P0479R3 SG14, Core
P0482R1 char8_t: A type for UTF-8 characters and strings Tom Honermann 2018-02-12 2018-02 P0482R0 Evolution, Library Evolution
P0501R3 C++ Module TS Issues List Gabriel Dos Reis 2018-01-30 2018-02 P0501R2 WG21
P0514R3 Efficient concurrent waiting for C++20 Olivier Giroux 2018-02-10 2018-02 P0514R2 SG1
P0528R1 The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange JF Bastien, Michael Spencer 2018-02-11 2018-02 P0528R0 SG1, Evolution, Core
P0533R0 constexpr for <cmath> and <cstdlib> Edward J. Rosten, Oliver J. Rosten 2018-02-10 2018-02 SG6, Library Evolution
P0539R3 A Proposal to add wide_int Template Class Igor Klevanets, Antony Polukhin 2018-01-31 2018-02 P0539R2 SG6, Library Evolution
P0542R3 Support for contract based programming in C++ G. Dos Reis, J. D. Garcia, J. Lakos, A. Meredith, N. Myers, B. Stroustrup 2018-02-12 2018-02 P0542R2 Evolution, Core
P0546R2 Span - foundation for the future H. Carter Edwards, Daniel Sunderland 2018-02-11 2018-02 P0546R1 Library Evolution
P0549R3 Adjuncts to std::hash Walter E. Brown 2018-02-03 2018-02 P0549R2 Library Evolution, Library
P0551R2 Thou Shalt Not Specialize std Function Templates! Walter E. Brown 2018-02-03 2018-02 P0551R1 Library
P0566R4 Proposed Wording for Concurrent Data Structures: Hazard Pointer and Read-Copy-Update (RCU) Michael Wong, Maged M. Michael, Paul McKenney, Geoffrey Romer, Andrew Hunter, Arthur O'Dwyer, David S. Hollman, JF Bastien, Hans Boehm, David Goldblatt 2018-02-11 2018-02 P0566R3 SG1, SG14, Library Evolution, Library
P0581R1 Standard Library Modules Marshall Clow, Beman Dawes, Gabriel Dos Reis, Stephan T. Lavavej, Billy O’Neal, Bjarne Stroustrup, Jonathan Wakely 2018-02-11 2018-02 P0581R0 Library Evolution
P0593R2 Implicit creation of objects for low-level object manipulation Richard Smith 2018-02-11 2018-02 P0593R1 SG12
P0608R1 A sane variant converting constructor Zhihao Yuan 2017-12-30 2018-02 P0608R0 Library Evolution, Library
P0631R2 Math Constants Lev Minkovsky 2018-02-06 2018-02 P0631R1 SG6, Library Evolution
P0634R2 Down with typename! Nina Ranns, Daveed Vandevoorde 2018-02-10 2018-02 P0634R1 Core
P0645R1 Text Formatting Victor Zverovich 2017-11-10 2018-02 P0645R0 Library Evolution
P0650R2 C++ Monadic interface Vicente J. Botet Escribá 2018-02-11 2018-02 P0650R1 Library Evolution
P0666R1 Revised Latches and Barriers for C++20 Olivier Giroux 2018-02-11 2018-02 P0666R0 SG1
P0668R2 Revising the C++ memory model Hans J. Boehm, Olivier Giroux, Viktor Vafeiades 2018-01-12 2018-02 P0668R1 SG1
P0670R2 Static reflection of functions Matúš Chochlík, Axel Naumann, David Sankel 2017-11-08 2018-02 P0670R1 Evolution, Library Evolution
P0671R1 Parametric Functions Axel Naumann 2018-02-12 2018-02 P0671R0 Evolution
P0684R2 C++ Stability, Velocity, and Deployment Plans Titus Winters 2018-02-10 2018-02 P0684R1 Evolution, Library Evolution
P0690R1 Tearable Atomics JF Bastien, Billy Robert O'Neal III, Andrew Hunter 2018-02-10 2018-02 P0690R0 SG1
P0701R2 Back to the std2::future Part II Bryce Adelstein Lelbach, Michał Dominiak, Hartmut Kaiser 2017-11-15 2018-02 P0701R1 SG1
P0707R3 Metaclasses: Generative C++ Herb Sutter 2018-02-11 2018-02 P0707R2 SG7, Evolution
P0713R1 Identifying Module Source Daveed Vandevoorde 2018-02-08 2018-02 P0713R0 Evolution, Core
P0732R0 Class Types in Non-Type Template Parameters Jeff Snyder 2018-02-11 2018-02 Evolution
P0736R0 Nameless parameters and unutterable specializations Hubert S.K. Tong 2018-02-12 2018-02 Evolution
P0745R0 Concepts in-place syntax Herb Sutter 2018-02-11 2018-02 Evolution
P0750R1 Consume JF Bastien, Paul E. McKenney 2018-02-11 2018-02 P0750R0 SG1
P0761R2 Executors Design Document Jared Hoberock, Michael Garland, Chris Kohlhoff, Chris Mysen, Carter Edwards, Gordon Brown, Michael Wong 2018-02-12 2018-02 P0761R1 SG1, Library Evolution
P0784R1 Standard containers and constexpr Louis Dionne, Richard Smith, Nina Ranns, Daveed Vandevoorde 2018-02-11 2018-02 P0784R0 Evolution, Library Evolution
P0786R1 ValuedOrError and ValueOrNone types Vicente J. Botet Escribá 2018-02-12 2018-02 P0786R0 Library Evolution
P0788R1 Standard Library Specification in a Concepts and Contracts World Walter E. Brown 2018-02-03 2018-02 P0788R0 Library
P0789R2 Range Adaptors and Utilities Eric Niebler 2018-02-11 2018-02 P0789R1 Library
P0792R1 function_ref: a non-owning reference to a Callable Vittorio Romeo 2017-11-26 2018-02 P0792R0 Library Evolution
P0796R1 Supporting Heterogeneous & Distributed Computing Through Affinity Gordon Brown, Ruyman Reyes, Michael Wong, H. Carter Edwards, Thomas Rodgers, Mark Hoemmen 2018-02-12 2018-02 P0796R0 SG1, SG14, Library Evolution, Library
P0797R1 Handling Concurrent Exceptions with Executors Matti Rintala, Michael Wong, Carter Edwards, Patrice Roy, Gordon Brown, Mark Hoemmen 2018-02-12 2018-02 P0797R0 SG1, SG14, Library Evolution, Library
P0805R1 Comparing Containers Marshall Clow 2018-02-10 2018-02 P0805R0 Library
P0811R0 Well-behaved interpolation for numbers and pointers S. Davis Herring 2018-02-09 2018-02 SG6, Library Evolution
P0814R2 hash_combine() Again Nicolai Josuttis 2018-02-12 2018-02 P0814R1 Library Evolution, Library
P0820R2 Feedback on P0214 Tim Shen 2018-02-06 2018-02 P0820R1 SG1, Library Evolution
P0824R1 Summary of SG14 discussion on <system_error> Arthur O'Dwyer, Charley Bay, Odin Holmes, Michael Wong, Niall Douglas 2018-02-05 2018-02 P0824R0 Library Evolution
P0825R1 A friendlier tuple get Agustín Bergé 2018-02-10 2018-02 P0825R0 Library Evolution
P0828R0 Elastic Integers John McFarlane 2018-02-12 2018-02 SG6, SG14
P0829R1 Freestanding Proposal Ben Craig 2017-10-14 2018-02 P0829R0 SG14, Library Evolution
P0836R0 Introduce Parallelism to the Ranges TS Gordon Brown, Christopher Di Bella, Michael Haidl, Toomas Remmelg, Ruyman Reyes, Michel Steuwer, Michael Wong 2018-02-12 2018-02 SG1, SG9, SG14, Library Evolution
P0843R1 fixed_capacity_vector Gonzalo Brito Gadeschi 2018-02-06 2018-02 P0843R0 Library Evolution
P0847R0 Deducing this Gašper Ažman, Simon Brand, Ben Deane, Barry Revzin 2018-02-12 2018-02 Evolution
P0856R0 Restrict Access Property for mdspan and span David S. Hollman, H. Carter Edwards, Christian Trott 2018-02-12 2018-02 Library Evolution
P0860R0 Atomic Access Property for span and mdspan H. Carter Edwards, Christian Trott, Daniel Sunderland 2018-02-10 2018-02 SG1, Library Evolution
P0863R0 Fixing the partial_order comparison algorithm Jeff Snyder 2018-02-12 2018-02 Library Evolution
P0868R1 Selected RCU Litmus Tests Paul E. McKenney, Alan Stern, Andrew Hunter, Jade Alglave, Luc Maranget 2017-11-20 2018-02 P0868R0 SG1
P0873R1 A plea for a consistent, terse and intuitive declaration syntax Corentin jabot 2017-11-27 2018-02 P0873R0 SG8, Evolution
P0876R0 fibers without scheduler Oliver Kowalke 2018-02-11 2018-02 SG1
P0877R0 A proposal for modular macros Bruno Cardoso Lopes 2018-02-11 2018-02 Evolution
P0878R0 Subobjects copy elision Antony Polukhin 2018-01-08 2018-02 Evolution
P0879R0 Constexpr for swap and swap related functions Antony Polukhin 2017-12-29 2018-02 Library
P0880R0 Numbers interaction Igor Klevanets, Antony Polukhin 2018-01-31 2018-02 SG6, Library Evolution
P0881R0 A Proposal to add stack trace library Alexey Gorgurov, Antony Polukhin 2018-01-23 2018-02 Library Evolution
P0883R0 Fixing Atomic Initialization Nicolai Josuttis 2018-02-12 2018-02 SG1, Library Evolution, Library
P0884R0 Extending the noexcept Policy Nicolai Josuttis 2018-02-10 2018-02 Library Evolution
P0886R0 The assume aligned attribute Timur Doumler 2018-02-12 2018-02 Evolution, Core
P0887R0 The identity metafunction Timur Doumler 2018-02-12 2018-02 Library Evolution, Library
P0888R0 C++ Standard Library Issues to be moved in Jacksonville Marshall Clow 2018-02-12 2018-02 WG21
P0889R0 Ultimate copy elision Antony Polukhin 2018-01-08 2018-02 Evolution
P0891R0 Let strong_order Truly Be a Customization Point! Gašper Ažman 2018-02-10 2018-02 Library
P0892R0 explicit(bool) Barry Revzin, Stephan T. Lavavej 2017-12-11 2018-02 Evolution
P0893R0 Chaining Comparisons Barry Revzin, Herb Sutter 2018-01-14 2018-02 Evolution
P0895R0 Renaming cell<> to latest<> Nicolai Josuttis, Tony van Eerd 2018-01-31 2018-02 Library Evolution, Library
P0896R0 Merging the Ranges TS Eric Niebler 2018-02-12 2018-02 WG21
P0898R0 Standard Library Concepts Casey Carter 2018-02-12 2018-02 Library Evolution, Library
P0899R0 LWG 3016 is Not a Defect Casey Carter 2018-01-30 2018-02 Library
P0900R0 An Ontology for Properties of mdspan David S. Hollman 2018-02-12 2018-02 Library Evolution
P0901R0 Size feedback in operator new Andrew Hunter, Chris Kennelly 2018-02-05 2018-02 Evolution
P0902R0 Move-only iterators Andrew Hunter 2018-02-05 2018-02 Library Evolution
P0903R0 Define basic_string_view(nullptr) and basic_string(nullptr) Ashley Hedberg 2018-02-02 2018-02 Library Evolution, Library
P0904R0 A strawman Future API Lee Howes, Andrii Grynenko, Jay Feldblum 2018-02-11 2018-02 SG1
P0905R0 Symmetry for spaceship Tomasz Kamiński, Herb Sutter, Richard Smith 2018-01-31 2018-02 Evolution, Library Evolution
P0906R0 Improvement suggestions for the Modules TS Jens Maurer 2018-02-11 2018-02 Evolution
P0907R0 Signed Integers are Two’s Complement JF Bastien 2018-02-09 2018-02 SG12. Evolution
P0908R0 Offsetof for Pointers to Members Eddie Kohler 2018-02-11 2018-02 Evolution
P0909R0 Module TS Supports Legacy Integration Steve Downey 2018-02-11 2018-02 Core, Library Evolution
P0911R0 Rebase the Coroutines TS onto the C++17 Standard Gor Nishanov 2018-02-03 2018-02 Core, Library
P0912R0 Merge Coroutines TS into C++20 working draft Gor Nishanov 2018-02-06 2018-02 WG21
P0913R0 Add symmetric coroutine control transfer Gor Nishanov 2018-02-08 2018-02 Evolution
P0914R0 Add parameter preview to coroutine promise constructor Gor Nishanov 2018-02-08 2018-02 Evolution
P0915R0 Concept-constrained auto Vittorio Romeo, John Lakos 2018-02-08 2018-02 Evolution
P0916R0 Naming implementation-defined simd_abi tag types Matthias Kretz 2018-02-12 2018-02 Library Evolution
P0917R0 Making operator?: overloadable Matthias Kretz 2018-02-12 2018-02 Evolution
P0918R0 More simd<> Operations Tim Shen 2018-02-08 2018-02 SG1, Library Evolution
P0919R0 Heterogeneous lookup for unordered containers Mateusz Pusz 2018-02-08 2018-02 Library Evolution, Library
P0921R0 Standard Library Compatibility Promises Titus Winters 2018-02-01 2018-02 Evolution, Library Evolution
P0922R0 LEWG wishlist for EWG Titus Winters 2018-02-10 2018-02 Evolution
P0923R0 Modules: Dependent ADL Nathan Sidwell 2018-02-08 2018-02 Evolution
P0924R0 Modules: Context-Sensitive Keyword Nathan Sidwell 2018-02-09 2018-02 Evolution
P0925R0 Modules: Unqualified Using Declarations Nathan Sidwell 2018-02-08 2018-02 Evolution
P0927R0 Towards A (Lazy) Forwarding Mechanism for C++ James Dennett, Geoff Romer 2018­-02­-08 2018-02 Evolution
P0928R0 Mitigating Speculation Attacks in C++ Geoff Romer, Chandler Carruth 2018-02-09 2018-02 Evolution, Library Evolution
P0929R0 Checking for abstract class types Jens Maurer 2018-02-08 2018-02 Evolution, Core
P0930R0 Semifying Awaitables Lee Howes, Andrii Grynenko, Jay Feldblum 2018-02-11 2018-02 SG1
P0931R0 Structured bindings with polymorphic lambas Aaryaman Sagar 2018-08-14 2018-02 Evolution
P0932R0 Tightening the constraints on std::function Aaryaman Sagar 2018-02-07 2018-02 Library Evolution
P0934R0 A Modest Proposal: Fixing ADL Herb Sutter 2018-02-08 2018-02 Evolution
P0935R0 Eradicating unnecessarily explicit default constructors from the standard library Tim Song 2018-02-12 2018-02 Library
P0936R0 Bind Returned/Initialized Objects to the Lifetime of Parameters Richard Smith, Nicolai Josuttis 2018-02-12 2018-02 Evolution, Core
P0937R0 SG5: Transactional Memory (TM) Meeting Minutes 2017/10/23-2018/1/29 Michael Wong 2018-02-12 2018-02 SG5
P0938R0 SG14: Low Latency Meeting Minutes 2017/12/13-2018/01/10 Michael Wong 2018-02-12 2018-02 SG14
P0939R0 Direction for ISO C++ B. Dawes, H. Hinnant, B. Stroustrup, D. Vandevoorde, M. Wong 2018-02-10 2018-02 WG21
P0940R0 Concurrency TS is growing: Concurrent Utilities and Data Structures Michael Wong, Olivier Giroux 2018-02-12 2018-02 SG1, Library Evolution, Library
P0941R0 Integrating feature-test macros into the C++ WD Clark Nelson 2018-02-09 2018-02 SG10, Evolution, Library Evolution
P0942R0 Introducing a <smart_ptr> header Jens Maurer 2018-02-10 2018-02 Library Evolution, Library
P0943R0 Support C atomics in C++ Hans J. Boehm 2018-02-11 2018-02 SG1, Library Evolution
P0944R0 Contiguous Ranges Casey Carter 2018-02-11 2018-02 Library Evolution
P0945R0 Generalizing alias declarations Richard Smith 2018-02-10 2018-02 Evolution
P0946R0 Towards consistency between <=> and other comparison operators Richard Smith 2018-02-10 2018-02 Evolution
P0947R0 Another take on Modules Richard Smith 2018-02-12 2018-02 Evolution
P0949R0 Adding support for type-based metaprogramming to the standard library Peter Dimov 2018-02-11 2018-02 Library Evolution
P0952R0 A new specification for std::generate_canonical Thomas Köppe, Davis Herring 2018-02-12 2018-02 SG6, Library
P0953R0 constexpr reflexpr Matúš Chochlík, Axel Naumann, David Sankel 2017-02-11 2018-02 SG7
P0954R0 What do we want to do with reflection? Bjarne Stroustrup 2018-02-11 2018-02 SG7, Evolution
P0955R0 Modules and macros Bjarne Stroustrup 2018-02-11 2018-02 Evolution
P0956R0 Answers to concept syntax suggestions Bjarne Stroustrup 2018-02-11 2018-02 Evolution
P0957R0 PFA: A Generic, Extendable and Efficient Solution for Polymorphic Programming Mingxin Wang 2018-02-12 2018-02 SG7, SG9, Evolution, Library Evolution
P0958R0 Networking TS changes to support proposed Executors TS Christopher Kohlhoff 2018-02-11 2018-02 SG1
P0959R0 A Proposal for a Universally Unique Identifier Library Marius Bancila 2018-02-12 2018-02 Library Evolution
P0960R0 Allow initializing aggregates from a parenthesized list of values Ville Voutilainen 2018-02-12 2018-02 Evolution
P0961R0 Relaxing the structured bindings customization point finding rules Ville Voutilainen 2018-02-11 2018-02 Evolution
P0962R0 Relaxing the range-for loop customization point finding rules Ville Voutilainen 2018-02-11 2018-02 Evolution
P0963R0 Structured binding declaration as a condition Zhihao Yuan 2018-02-05 2018-02 Evolution
P0964R0 Finding the right set of traits for simd<T> Matthias Kretz 2018-02-12 2018-02 SG1, Library Evolution
P0965R0 Initializers of objects with automatic and dynamic storage duration have funny inconsistencies Ville Voutilainen 2018-02-12 2018-02 Evolution
P0966R0 string::reserve Should Not Shrink Mark Zeren, Andrew Luo 2018-02-08 2018-02 Library Evolution, Library

Factory With Self-Registering Types—Bartlomiej Filipek

Let’s see how classes can register themselves in a factory and what are the examples where it’s used.

Factory With Self-Registering Types

by Bartlomiej Filipek

From the article:

In this post, I’ve covered a type of factory where types register themselves. It’s an opposite way of simple factories where all the types are declared upfront. Such approach gives more flexibility and removes dependency on the exact list of supported classes from the factory.

Read-Compile-Run-Loop - a tiny embeddable REPL analog for C++—Viktor Kirilov

Most scripting languages have REPLs (read-eval-print-loop) - an interactive console.

Read-Compile-Run-Loop - a tiny embeddable REPL analog for C++

by Viktor Kirilov

From the article:

Ever wanted to modify some value or execute some (complex) statement while your C++ program is running just to test something out? Something that cannot be done through the debugger or wouldn’t be trivial? Scripting languages have REPLs and it's time for C++ to get one too.

To RAII or Not to RAII?—Jonathan Boccara

Good question.

To RAII or Not to RAII?

by Jonathan Boccara

From the article:

RAII is a central concept in C++, that consists in relying on the compiler to call destructors automatically in certain cases. Putting appropriate code in such destructors then relieves us from calling that code – the compiler does it for us.

RAII is an idiomatic technique of C++, but can we use RAII for everything? Is it a good idea to shift every possible piece of code to the destructor of some class, to leave the work to the compiler and make calling code as light as can be?

Since this question comes down to asking if the proverbial hammer is a tool fit for every single task, the answer to that question is probably the proverbial No.

But then, in which cases would RAII improve the design of a piece of code?

In this article we’ll see a case where RAII is adapted, then a case where RAII is NOT adapted. And after that we’ll see a case open to discussion. We’ll then conclude with how to use levels of abstractions to make the decision to RAII or not to RAII...

Overload 143 is now available

ACCU’s Overload journal of February 2018 is out. It contains the following C++ related articles.

Overload 143 is now available

From the journal:

Hapaxes, Singletons and Anomalies
Programmers can be odd. Frances Buontempo celebrates many manifold peculiarities. by Frances Buontempo

A Wider Vision of Software Development
Is code a hopeful arrangement of bytes? Charles Tolman brings his Organising Principles series to a close. by Charles Tolman

An MWSR Queue with Minimalist Locking
Multithreaded queues come in many flavours. Sergey Ignatchenko describes his implementation of a multiple writer single reader queue. by Sergey Ignatchenko

Testing: Choose the Right Level
Testing can be easy. Andy Balaam considers levels to keep your focus just right. by Andy Balaam

CTAD – What Is This New Acronym All About?
What is class template argument deduction? Roger Orr elucidates this new C++17 feature. by Roger Orr

C++ with Meta-classes?
Meta-classes will allow us to detail class requirements. Francis Glassborow compares them to developments of C++ in the 1990s. by Francis Glassborow

Practical Scale Testing
Everyone wants scalable systems. Arun Saha explores methods for testing scalability. by Arun Saha

Functional Error-Handling with Optional and Expected
Exceptions should be exceptional. Simon Brand shows modern alternatives from the standard library and ways to improve them. by Simon Brand