CppCon 2014 Modern Template Metaprogramming: A Compendium, Part I--Walter E. Brown

Have you registered for CppCon 2015 in September? Don’t delay – Early Bird registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2014 for you to enjoy. Here is today’s feature:

Modern Template Metaprogramming: A Compendium, Part I

by Walter E. Brown

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

Template metaprogramming has become an important part of a C++ programmer's toolkit. This talk will demonstrate state-of-the-art metaprogramming techniques, applying each to obtain representative implementations of selected standard library facilities.

Along the way, we will look at void_t, a recently-proposed, extremely simple new new type_traits candidate whose use has been described by one expert as "highly advanced (and elegant), and surprising even to experienced template metaprogrammers."

Simple C++11 metaprogramming--Peter Dimov

If you like to play with templates, read this article:

Simple C++11 metaprogramming

by Peter Dimov

From the article:

The wide acceptance of Boost.MPL made C++ metaprogramming seem a solved problem. Perhaps MPL wasn't ideal, but it was good enough to the point that there wasn't really a need to seek or produce alternatives.

C++11 changed the playing field. The addition of variadic templates with their associated parameter packs added a compile-time list of types structure directly into the language...

Holier Than Thou--Tony “Bulldozer00” (BD00) DaSilva

A rare but possible problem that can occur with long running programs:

Holier Than Thou

by Tony DaSilva

From the article:

Since C++ (by deliberate design) does not include a native garbage collector or memory compactor, programs that perform dynamic memory allocation and de-allocation (via explicit or implicit use of the “new” and “delete” operators) cause small “holes” to accumulate in the free store over time. I guess you can say that C++ is “holier than thou“. :( ...

2015-05 post-Lenexa mailing available

The 2015-05 mailing of new standards papers is now available.

NOTE: A number of these papers have already been publicized on this blog. This is the complete list including ones not previously publicized.

 

2015-05 post-Lenexa
N4483 Read-copy-update Paul E. McKenney 2015-04-14 2015-05 Concurrency
N4484 C++ Standard Library Active Issues List (Revision R93) Marshall Clow 2015-05-23 2015-05 Library
N4485 C++ Standard Library Defect Report List (Revision R93) Marshall Clow 2015-05-23 2015-05 Library
N4486 C++ Standard Library Closed Issues List (Revision R93) Marshall Clow 2015-05-23 2015-05 Library
N4487 Constexpr lambdas Faisal Vali, Ville Voutilainen 2015-04-28 2015-05 Evolution
N4488 Responses to PDTS comments on Transactional Memory, version 2 Jens Maurer 2015-05-07 2015-05 N4410 Concurrency
N4489 WG21 2015-04-24 Telecon Minutes Jonathan Wakely 2015-04-29 2015-05
N4490 WG21 2015-05 Lenexa Minutes Jonathan Wakely 2015-05-29 2015-05
N4491 PL22.16 2015-05 Lenexa Minutes (Draft) Jonathan Wakely 2015-05-30 2015-05
N4492 Thoughts about C++17 Bjarne Stroustrup 2015-05-15 2015-05
N4493 Thoughts on propagate_const Jonathan Coe missing
N4494 Multidimensional bounds, offset and array_view, revision 6 Lukasz Mendakiewicz, Herb Sutter 2015-05-01 2015-05 N4346 Library
N4495 Operator dot Mathias Gaunard, Dietmar Kühl 2015-05-22 2015-05 Evolution
N4496 WG21 2014-11 Urbana Minutes (revision 1) Jonathan Wakely 2015-05-28 2015-05
N4497 PL22.16 2014-11 Urbana Minutes (Final) Jonathan Wakely 2015-05-30 2015-05
N4498 Variadic lock_guard (Rev. 2) Mike Spertus 2015-05-04 2015-05 N4470 Concurrency
N4499 Draft wording for Coroutines (Revision 2) Gor Nishanov, Daveed Vandevoorde 2015-05-22 2015-05 N4403 Evolution
N4500 Withdrawn missing
N4501 Working Draft, Technical Specification for C++ Extensions for Concurrency Artur Laksberg 2015-05-08 2015-05 Concurrency Adopted 2015-05
N4502 Proposing Standard Library Support for the C++ Detection Idiom, V2 Walter E. Brown 2015-05-03 2015-05 N4436 Library Adopted 2015-05
N4503 Atomic View (V3) Carter Edwards missing
N4504 Atomic View - Floats Carter Edwards missing
N4505 Working Draft, Technical Specification for C++ Extensions for Parallelism Jared Hoberock 2015-05-05 2015-05 N4407 Concurrency Adopted 2015-05
N4506 Parallelism TS Editor's Report Jared Hoberock 2015-05-06 2015-05 Concurrency
N4507 Technical Specification for C++ Extensions for Parallelism Jared Hoberock 2015-05-05 2015-05
N4508 A proposal to add shared_mutex (untimed) (Revision 4) Gor Nishanov 2015-05-05 2015-05 N4241 Concurrency Adopted 2015-05
N4509 constexpr atomic::is_always_lock_free Olivier Giroux, JF Bastien, Jeff Snyder 2015-05-05 2015-05 Concurrency
N4510 Minimal incomplete type support for standard containers, revision 4 Zhihao Yuan 2015-05-05 2015-05 N4390 Library Adopted 2015-05
N4511 Adding [nothrow-]swappable traits, revision 1 Daniel Krügler 2015-05-22 2015-05 N4426 Library
N4512 Multidimensional bounds, offset and array_view, revision 7 _ukasz Mendakiewicz, Herb Sutter 2015-05-07 2015-05 Library
N4513 Working Draft Technical Specification for C++ Extensions for Transactional Memory Michael Wong 2015-05-08 2015-05 N4301 Concurrency Adopted 2015-05
N4514 Technical Specification for C++ Extensions for Transactional Memory Michael Wong 2015-05-08 2015-05
N4515 Editor's Report: Technical Specification for C++ Extensions for Transactional Memory Michael Wong 2015-05-22 2015-05 N4338 Concurrency
N4516 Variant: a type-safe union (v3) Axel Naumann 2015-05-06 2015-05 N4450 Library Evolution Revised N4542
N4517 Record of Response: National Body Comments ISO/IEC PDTS 19841 Barry Hedquist 2015-05-08 2015-05
N4518 Make exception specifications be part of the type system, version 2 Jens Maurer 2015-05-08 2015-05 N4320 Core Revised N4533
N4519 Source-Code Information Capture Robert Douglas 2015-05-08 2015-05 Library Adopted 2015-05
N4520 Light-weight EAS rev. 5 Torvald Riegel missing Evolution
N4521 Merge Fundamentals V1 into V2 Jeffrey Yaskin 2015-04-12 2015-05 N4479 Library Evolution Adopted 2015-05
N4522 std::atomic_object_fence(mo, T&&...) Olivier Giroux, JF Bastien 2015-05-21 2015-05 Concurrency
N4523 constexpr std::thread::hardware_{true,false}_sharing_size Olivier Giroux, JF Bastien 2015-05-21 2015-05 Concurrency
N4524 Respect vector::reserve(request) Relative to Reallocation Nevin Liber 2015-05-22 2015-05 Library Evolution
N4525 C++ Standard Library Issues Resolved Directly In Lenexa Marshall Clow 2015-05-08 2015-05 Library Adopted 2015-05
N4526 Towards improved support for games, graphics, real-time, low latency, embedded systems Michael Wong, Sean Middleditch, Nicolas Guillemot 2015-05-22 2015-05 SG14
N4527 Working Draft, Standard for Programming Language C++ Richard Smith 2015-05-22 2015-05 N4431
N4528 Editor's Report -- Working Draft, Standard for Programming Language C++ Richard Smith 2015-05-22 2015-05
N4529 Working Draft, C++ Extensions for Library Fundamentals, Version 2 Jeffrey Yaskin 2015-05-22 2015-05 N4481 Library Evolution
N4530 Editor's Report for the Library Fundamentals TS Jeffrey Yaskin 2015-05-22 2015-05 Library Evolution
N4531 std::rand replacement, revision 3 Zhihao Yuan 2015-05-08 2015-05 N4316 Library
N4532 Proposed wording for default comparisons Jens Maurer 2015-05-22 2015-05 Evolution
N4533 Make exception specifications be part of the type system, version 3 Jens Maurer 2015-05-20 2015-05 N4518 Core
N4534 Data-Invariant Functions (revision 3) Jens Maurer 2015-05-22 2015-05 N4314 Library Evolution
N4535 Feature-testing preprocessor predicates for C++17 Clark Nelson, Richard Smith 2015-05-06 2015-05 Feature Testing
N4536 An algorithm to "clamp" a value between a pair of boundary values Martin Moene, Niels Dekker 2015-05-17 2015-05 Library Evolution
N4537 Adding Symmetry Between shared_ptr and weak_ptr Arthur O'Dwyer 2015-05-19 2015-05 Library
N4538 Technical Specification for C++ Extensions for Concurrency Artur Laksberg 2015-05-20 2015-05
N4539 Evolution Active Issues List (Revision R12) Ville Voutilainen 2015-05-22 2015-05 Evolution
N4540 Evolution Completed Issues List (Revision R12) Ville Voutilainen 2015-05-22 2015-05 Evolution
N4541 Evolution Closed Issues List (Revision R12) Ville Voutilainen 2015-05-22 2015-05 Evolution
N4542 Variant: a type-safe union (v4). Axel Naumann 2015-05-24 2015-05 N4516 Library Evolution
N4543 A polymorphic wrapper for all Callable objects David Krauss 2015-05-26 2015-05 Library Evolution
N4544 October 2015 WG21 Meeting (Kona) Thomas Plum 2015-05-26 2015-05

CppCon 2014 Practical Functional Programming in C++--Bryce Adelstein-Lelbach

Have you registered for CppCon 2015 in September? Don’t delay – Early Bird registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2014 for you to enjoy. Here is today’s feature:

Practical Functional Programming in C++

by Bryce Adelstein-Lelbach

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

To the untrained eye, pure functional programming may appear to be out of place in our traditionally imperative C++ world. However, the functional paradigm has become increasing prominent in production C++ codes, especially when implementing asynchronous execution.

This talk is intended as a primer for attendees who are either unfamiliar with functional programming or have doubts its practical uses in modern C++.

Examples from different sectors of industry/academia will be presented throughout.

No prior functional programming knowledge will be needed. While this talk will cover some theory, coverage of non-C++ programming languages will be minimal. The focus of this talk will be the application of theories from FP to C++, not FP itself.

GoingNative 38: The future of C++[17] - Updates from Lenexa--Gabriel Ha

A nice recapitulative video of what C++17 could be:

GoingNative 38: The future of C++[17] - Updates from Lenexa

by Gabriel Ha

From the video:

A few weeks ago, the ISO C++ Committee met in Lenexa, Kansas to hash out the future of the C++ language, specifically for C++17. We're honored to speak to two (previously featured) Microsoft delegates to the committee -- Gabriel "Gaby" Dos Reis and Artur Laksberg -- who took the time to give us a very nice overview of the major things that went down at the meeting!

docopt.cpp: A C++11 Port--Jared Grubb

A nice library to help you ship a program:

docopt.cpp: A C++11 Port

by Jared Grubb

From the article:

Isn't it awesome how getopt (and boost::program_options for you fancy folk!) generate help messages based on your code?! These timeless functions have been around for decades and have proven we don't need anything better, right?

Hell no! You know what's awesome? It's when the option parser is generated based on the beautiful help message that you write yourself! This way you don't need to write this stupid repeatable parser-code, and instead can write only the help message--the way you want it...

CppCon 2014 Microsoft w/ C++ to Deliver Office Across Different Platforms, Part II—Zaika Antoun

Have you registered for CppCon 2015 in September? Don’t delay – Early Bird registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2014 for you to enjoy. Here is today’s feature:

Microsoft w/ C++ to Deliver Office Across Different Platforms, Part II

by Zaika Antoun

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

What does it take to target multiple major mobile devices (as well as traditional environments) with portable, efficient, single-source code? This talk demonstrates architectures, techniques, and lessons learned rooted in actual experience with using C++ to deliver several major cross-platform projects across iOS, Android, Windows, and Mac: Microsoft Office (Word, Excel, PowerPoint, OneNote) and the SQL Server PowerBI. Each presents a different case study: For example, Office already used C++, whereas PowerBI was originally written in Silverlight and then rewritten in C++; Office is a set of user-facing apps, whereas PowerBI is a system component. Although some of these are demanding first-tier “Cadillac” applications, we expect this experience to be a model for the future as more and more apps fall into this category and use C++ to target many popular platforms from (mostly) a single source base. This talk will cover the following key topics and tradeoffs: Rich vs. reach, including access to latest OS features (e.g., iOS 8 additions) and hardware features (e.g., vector units, GPUs). Consistency of functionality. Client code vs. server/service web code. Sharing vs. quality, including dialing appropriately between more shared code and high quality code. Drawing the line between the bulk of C++ code and interfacing with non-C++ for UX and PALs (platform adaptation/abstraction layers) for target-specific user interface and system services. Architecting PALs, including why “mini-PALs” rather than an “über-PAL.” Forces “doing the right thing” and good architecture with composable components. How C++ enables things not feasible using other technologies. Velocity and enabling faster cross-platform development and deployment. Cost of maintenance, including time, size, and complexity (both breadth and depth). And, last but not least, developing in a single modern C++ source base built with different evolving C++ compilers, including VC++ and Clang/LLVM.

How to implement a stateful meta-container in C++ -- Filip Roséen

Implementing stateful meta contianer in C++ Using Modern C++.

How to implement a stateful meta-container in C++

by Filip Roséen

From the article:

This post has explained the technical aspects related to an implementation of a stateful meta-container, allowing a developer to more easily work with, and modify, a given set of entities during the phase of translation.

Together with the previous posts in this series, the formerly unstateful world of translation has gone into a stateful universe — allowing for some crazy, but conforming, implementations.