Loading…
Attending this event?

Log in to bookmark your favorites and sync them to your phone or calendar.

Saturday, September 14
 

09:00

Advanced and Modern C++ Programming: The Tricky Parts
Advanced and Modern C++ Programming: The Tricky Parts is a two-day training course with programming examples taught by Nicolai Josuttis. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Students are expected to have a basic knowledge of C++ including C++11. Students are not required to bring any laptop. We will go through exercises together with the laptop of the presenter. Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries.He is well known in the programming community because he not only speaks and... Read More →


Saturday September 14, 2019 09:00 - 17:00
Summit 9

09:00

C++11/14 for C++03 Developers
C++11/14 for C++03 Developers is a two-day training course with programming examples taught by Vittorio Romeo. It is offered 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Experience with C++03, including some familiarity with more advanced constructs such as templates.(Knowledge of more arcane techniques such as SFINAE is not required.) Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Vittorio Romeo

Vittorio Romeo

Software Engineer, Bloomberg
Vittorio Romeo (B.Sc. Computer Science) has been a Software Engineer at Bloomberg for more than 3 years, working on mission-critical company C++ infrastructure and providing Modern C++ training to hundreds of fellow employees.He began programming around the age of 8 and quickly became... Read More →


Saturday September 14, 2019 09:00 - 17:00
Cottonwood 2

09:00

Concurrency with Modern C++
Concurrency with Modern C++ is a two-day training course with programming examples taught by Rainer Grimm. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Participants should have a basic knowledge of the C++ language and the fundamentals of multithreading.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Rainer Grimm

Rainer Grimm

Trainer, Modernes c++


Saturday September 14, 2019 09:00 - 17:00
Summit 11

09:00

Debugging and Profiling C++ Code on Linux
Debugging and Profiling C++ Code on Linux is a two-day training course with programming exercises taught by Milian Wolff of The KDAB Group. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included. Participants should have basic knowledge of the C++ language. No prior knowledge of any presented tools is assumed. Course and instructor details are available here.
For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Milian Wolff

Milian Wolff

Senior Software Engineer, KDAB
Milian Wolff is a Senior Software Engineer at KDAB, Milian leads the R&D in tooling and profiling in which he has a special interest. Milian created Massif-Visualizer, heaptrack and hotspot, all of which are now used regularly to improve the performance of C++ and Qt applications... Read More →


Saturday September 14, 2019 09:00 - 17:00
Summit 10

09:00

Modern C++ API Design
Modern C++ API Design is a two-day training course with programming examples taught by Bob Steagall. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Participants should have advanced beginner to intermediate knowledge of C++14 and the standard library, including a good understanding of copy semantics, move semantics, inheritance, virtual functions, exceptions, lambdas, and some experience with templates. Experience with multi-threading is a plus, but not required.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Bob Steagall

Bob Steagall

Chief Cook and Bottle Washer, KEWB Computing
I've been working in C++ since discovering the second edition of The C++ Programming Language in a college bookstore in 1992. The majority of my career has been spent in medical imaging, where I led teams building applications for functional MRI and CT-based cardiac visualization... Read More →


Saturday September 14, 2019 09:00 - 17:00
Cottonwood 7

09:00

Modern C++ Design Patterns
Modern C++ Design Patterns is a two-day training course with programming examples taught by Klaus Iglberger. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Course participants should have a solid base knowledge of C++ and at least one to two years of experience with the language.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Siemens
Klaus Iglberger is a freelancing C++ trainer and consultant and is currently on the payroll of Siemens in Nuremberg, Germany. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced... Read More →


Saturday September 14, 2019 09:00 - 17:00
Summit 7

09:00

Modern C++ Template Common Knowledge
Modern C++ Template Common Knowledge is a two-day training course with programming exercises taught by Steve Dewhurst. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Attendees should be experienced software developers with basic knowledge of C++ templates. Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Stephen Dewhurst

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-author... Read More →


Saturday September 14, 2019 09:00 - 17:00
Summit 6

09:00

More Concurrent Thinking in C++: Beyond the Basics
More Concurrent Thinking in C++: Beyond the Basics is a two-day training course with programming exercises taught by Anthony Williams. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Attendees should be experienced software developers with basic knowledge of C++ templates. Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Saturday September 14, 2019 09:00 - 17:00
Cottonwood 6

09:00

System Architecture And Design Using Modern C++
System Architecture And Design Using Modern C++ is a two-day training course with programming exercises taught by Charley Bay. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers

Saturday September 14, 2019 09:00 - 17:00
Summit 8

09:00

The Standard Library from Scratch
The Standard Library from Scratch is a two-day training course with programming exercises taught by Arthur O’Dwyer. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Students are expected to have a good working knowledge of C++11. A working knowledge of classes, virtual functions, templates, exception-handling, C++11 lambdas, and move semantics will be assumed.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers

Saturday September 14, 2019 09:00 - 17:00
Summit 4

09:00

Thinking Small
Thinking Small is a two-day training course with programming exercises taught by Patrice Roy. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 25 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Saturday September 14, 2019 09:00 - 17:00
Summit 5

17:30

Volunteers Dinner
We are treating the Aqua Army (the CppCon volunteers) to dinner and fun at Punch Bowl Social, but we are welcoming anyone that would like to meet and socialize with the volunteers.

The entertainment includes darts, Bonzini (foosball), Giant Scrabble, shuffleboard, a video game arcade, and bowling.

Dinner and entertainment is free for volunteers, but you can join the fun for $35, which pays for the buffet and all the fun you can have.

To RSVP for the Volunteers Dinner, please complete the Volunteers' Dinner, RSVP form.

Transportation Information

Meet at Rockies Square just before 18:00.

The bus will be making multiple trips, so if you miss it, don't worry, just wait for the next trip.

The last bus will leave at 21:45.


Saturday September 14, 2019 17:30 - 21:00
Punch Bowl Social 3120 N. Uinta St., Denver, Colorado 80238
 
Sunday, September 15
 

09:00

Advanced and Modern C++ Programming: The Tricky Parts
Advanced and Modern C++ Programming: The Tricky Parts is a two-day training course with programming examples taught by Nicolai Josuttis. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Students are expected to have a basic knowledge of C++ including C++11. Students are not required to bring any laptop. We will go through exercises together with the laptop of the presenter. Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries.He is well known in the programming community because he not only speaks and... Read More →


Sunday September 15, 2019 09:00 - 17:00
Summit 9

09:00

C++11/14 for C++03 Developers
C++11/14 for C++03 Developers is a two-day training course with programming examples taught by Vittorio Romeo. It is offered 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Experience with C++03, including some familiarity with more advanced constructs such as templates.(Knowledge of more arcane techniques such as SFINAE is not required.) Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Vittorio Romeo

Vittorio Romeo

Software Engineer, Bloomberg
Vittorio Romeo (B.Sc. Computer Science) has been a Software Engineer at Bloomberg for more than 3 years, working on mission-critical company C++ infrastructure and providing Modern C++ training to hundreds of fellow employees.He began programming around the age of 8 and quickly became... Read More →


Sunday September 15, 2019 09:00 - 17:00
Cottonwood 2

09:00

Concurrency with Modern C++
Concurrency with Modern C++ is a two-day training course with programming examples taught by Rainer Grimm. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Participants should have a basic knowledge of the C++ language and the fundamentals of multithreading.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Rainer Grimm

Rainer Grimm

Trainer, Modernes c++


Sunday September 15, 2019 09:00 - 17:00
Summit 11

09:00

Debugging and Profiling C++ Code on Linux
Debugging and Profiling C++ Code on Linux is a two-day training course with programming exercises taught by Milian Wolff of The KDAB Group. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included. Participants should have basic knowledge of the C++ language. No prior knowledge of any presented tools is assumed. Course and instructor details are available here.
For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Milian Wolff

Milian Wolff

Senior Software Engineer, KDAB
Milian Wolff is a Senior Software Engineer at KDAB, Milian leads the R&D in tooling and profiling in which he has a special interest. Milian created Massif-Visualizer, heaptrack and hotspot, all of which are now used regularly to improve the performance of C++ and Qt applications... Read More →


Sunday September 15, 2019 09:00 - 17:00
Summit 10

09:00

Engage, Entertain, Educate: Technical Speaking that Works
Engage, Entertain, Educate: Technical Speaking that Works is a one-day
workshop lead by Andrei Alexandrescu, John Lakos, and Kate Gregory. It is offered from 9AM to 5PM on Sunday, September 15th. Lunch is included.

Because each participant will be given time to give short presentations, size is strictly limited.

# Course Description

Successful technical talks require more than just mastery of the topic at
hand. They also demand a strong stage presence, a memorable delivery,
effective audience management, clear presentation materials, comfort with the environment (e.g., mics, stages, screens), and an ability to cope with the unexpected. This workshop, led by three of the most storied speakers in C++, lets you strut your stuff in several short presentations. After each, you’ll receive specific feedback on how your stuff-strutting can be improved.

For speakers at CppCon, the utility of the workshop should be obvious, but anyone giving (or aspiring to give) good technical presentations will benefit from this session.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for John Lakos

John Lakos

Software Engineer, Bloomberg
John Lakos, author of Large-Scale C++ Software Design, serves at Bloomberg LP in New York City as a senior architect and mentor for C++ Software Development world-wide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working Group. Previously, Dr... Read More →
avatar for Andrei Alexandrescu

Andrei Alexandrescu

Vice President and Treasurer, The D Language Foundation
Andrei Alexandrescu is a researcher, software engineer, and author. He wrote three best-selling books on programming (Modern C++ Design, C++ Coding Standards, and The D Programming Language) and numerous articles and papers on wide-ranging topics from programming to language design... Read More →
avatar for Kate Gregory

Kate Gregory

Partner, Gregory Consulting
Kate Gregory has been using C++ since before Microsoft had a C++ compiler. She writes, mentors, codes, and leads projects, in both C++ and .NET, especially for Windows. Kate is a Microsoft Regional Director, a Visual C++ MVP, has written over a dozen books, and speaks at conferences... Read More →


Sunday September 15, 2019 09:00 - 17:00
Maple 1

09:00

Introduction to Conan C++ Package Manager
Introduction to Conan C++ Package Manager is a one-day training course taught by Diego Rodriguez-Losada. It is offered from 9AM to 5PM on Sunday, September 15th. This class is a full hands-on introductory course to how to use Conan, the open source C++ package manager. From the basics, how to consume existing packages in your applications and how to create packages for your own libraries, to advanced concepts like integrations with different build systems, SCM, development of packages, versioning, dependencies conflicts, ABI compatibility and binaries management. All these concepts will be approached and learnt in real working exercises, installing, creating, cross-building, uploading and downloading packages.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Diego Rodriguez-Losada

Diego Rodriguez-Losada

Diego Rodriguez-Losada‘s passions are robotics and SW engineering and development. He has developed many years in C and C++ in the Industrial, Robotics and AI fields. Diego was also a University (tenure track) professor and robotics researcher for 8 years, till 2012, when he quit... Read More →


Sunday September 15, 2019 09:00 - 17:00
Summit 2

09:00

Modern C++ API Design
Modern C++ API Design is a two-day training course with programming examples taught by Bob Steagall. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Participants should have advanced beginner to intermediate knowledge of C++14 and the standard library, including a good understanding of copy semantics, move semantics, inheritance, virtual functions, exceptions, lambdas, and some experience with templates. Experience with multi-threading is a plus, but not required.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Bob Steagall

Bob Steagall

Chief Cook and Bottle Washer, KEWB Computing
I've been working in C++ since discovering the second edition of The C++ Programming Language in a college bookstore in 1992. The majority of my career has been spent in medical imaging, where I led teams building applications for functional MRI and CT-based cardiac visualization... Read More →


Sunday September 15, 2019 09:00 - 17:00
Cottonwood 7

09:00

Modern C++ Design Patterns
Modern C++ Design Patterns is a two-day training course with programming examples taught by Klaus Iglberger. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Course participants should have a solid base knowledge of C++ and at least one to two years of experience with the language.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Siemens
Klaus Iglberger is a freelancing C++ trainer and consultant and is currently on the payroll of Siemens in Nuremberg, Germany. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced... Read More →


Sunday September 15, 2019 09:00 - 17:00
Summit 7

09:00

Modern C++ Template Common Knowledge
Modern C++ Template Common Knowledge is a two-day training course with programming exercises taught by Steve Dewhurst. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Attendees should be experienced software developers with basic knowledge of C++ templates. Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Stephen Dewhurst

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-author... Read More →


Sunday September 15, 2019 09:00 - 17:00
Summit 6

09:00

More Concurrent Thinking in C++: Beyond the Basics
More Concurrent Thinking in C++: Beyond the Basics is a two-day training course with programming exercises taught by Anthony Williams. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Attendees should be experienced software developers with basic knowledge of C++ templates. Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Sunday September 15, 2019 09:00 - 17:00
Cottonwood 6

09:00

System Architecture And Design Using Modern C++
System Architecture And Design Using Modern C++ is a two-day training course with programming exercises taught by Charley Bay. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers

Sunday September 15, 2019 09:00 - 17:00
Summit 8

09:00

The Standard Library from Scratch
The Standard Library from Scratch is a two-day training course with programming exercises taught by Arthur O’Dwyer. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Students are expected to have a good working knowledge of C++11. A working knowledge of classes, virtual functions, templates, exception-handling, C++11 lambdas, and move semantics will be assumed.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers

Sunday September 15, 2019 09:00 - 17:00
Summit 4

09:00

Thinking Small
Thinking Small is a two-day training course with programming exercises taught by Patrice Roy. It is offered from 9AM to 5PM on Saturday and Sunday, September 14th and 15th (immediately prior to the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 25 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Sunday September 15, 2019 09:00 - 17:00
Summit 5

09:00

Board Games
Did you notice that many people in software love board and card games? This year we're taking this and running with it - we're doing a whole-day board and card game event, before the main CppCon conference!

Come to the Gaylord Rockies and participate in the selection of board and card games we're bringing along!

## Board games
  • Saboteur (2 player)
  • Oatmeal's Exploding Kittens (2-5 player)
  • Loot Letter (2-4 player)
  • The Resistance (5-10 player)
  • Coup
  • Shadow Hunters
  • Jump Drive
  • Hanabi
  • Secret Hitler
  • Codenames: Pictures
  • One Night: Ultimate Werewolf

## Card games
  • Fluxx
  • Magic: The Gathering (Core2020 draft 12 player, Chaos draft 12 player, Unstable draft 12 player, EDH any number of players)

As Magic the Gathering is a bit of a big card game to just list as a single entry, we've decided to structure it a bit more. We'll be doing Magic the Gathering for any level of experience with it. You can join your first Magic the Gathering draft at 10AM, tailored towards beginners. If you've played it before, join the 3PM Chaos Draft for a more complicated card pool and challenging opponents. Those who have built their own Commander / EDH deck, bring it along - you won't be alone! There will be a cube of Unstable for those who appreciate a bit more silliness too. If you've never played this before, watch the Extra Credits introduction to Magic: the Gathering at https://www.youtube.com/watch?v=R4uXnVXcI70&list=PLtmG3-YP1ACYqXhubayli68h1h6xg3BPZ The drafts are free to join for anyone. Because of visa reasons it is not possible to retain the cards you draft, nor to pay for them. My visa won't allow for anything construable as commercial, so I have to make sure it's not.

Note that, despite the names of the games implying some very weird things will be going on, the Code of Conduct does apply and you will be asked to keep your emotion and language under control. Keep your explosions and Nazis to the games in which those apply.

Moderators
avatar for Peter Bindels

Peter Bindels

Software Engineer, TomTom

Sunday September 15, 2019 09:00 - 18:00
Grand Lodge

11:15

Field Trip Meetup
For those who've registered for this year's Field Trip, let's meet up at Rockies Square.

Staff
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http://cppbestpractices.com.I'm... Read More →


Sunday September 15, 2019 11:15 - 11:30

17:00

Speaker Ready Room
If you are presenting at CppCon and you'd like to see how your equipment works with onsite equipment, then please feel free to drop by the Speaker Ready Room (Crest 3) on Sunday evening to try it out.
Feel free to reach out to Speaker Liaison Robin Kuzmin if you need any help (@kuzmin_robin, +1 415 254 0978, kuzmin.robin@gmail.com).

Staff
avatar for Robin Kuzmin

Robin Kuzmin

Sr. SW Engineer, MS
Crazy about C++ passionate bug preventer, meticulous code reviewer,thorough analyst of the design decisions. 5 years in C++, 13 years in C, mostly in firmware development and hardware simulation.-----* Speaker Liaison for 2018 - 2019 CppCon and C++Now.* Volunteer Shift Leader, Surveys... Read More →


Sunday September 15, 2019 17:00 - 22:00
Crest 3

17:30

Tee Shirt Night Dinner
Tee Shirt Night is our way to helping you get to know other conference attendees even before the conference has officially started. It works best if you brought a C++ (or CppCon) shirt with you. But even if you didn't you can join the fun.

Here is how:
  1. Put on your C++ or CppCon shirt (or don't, if you didn't bring one).
  2. Go to any of the Gaylord Rockies eateries.
  3. Look for others wearing a C++ or CppCon shirt.
  4. Ask to join their group.
  5. Enjoy getting to know other attendees before the conference starts!
  6. Get a 10% discount on your dinner!

Sunday September 15, 2019 17:30 - 20:30
Gaylord Rockies Eateries

20:00

Registration Reception
Come for the registration and stay for the reception.

Get your badge, your registration package, and, if you ordered one, your shirt.

Stick around and get acquainted with new friends and reacquainted with old friends.

Sunday September 15, 2019 20:00 - 22:00
Registration
 
Monday, September 16
 

08:00

Registration
Welcome! Let's get the paperwork out of the way.

Monday September 16, 2019 08:00 - 08:45
Registration

08:45

C++20: C++ at 40
It is now 40 years since C++ (then called C with Classes) had its first non-research user. It is now 35 years since the first commercial release of C++. It is now 30 years since the start of the standards process.
So what is C++? I will try to explain what's great about C++, C++20, as a modern language, not treating it as a layer cake of features. Imagine you have never heard of C, C with Classes, or C++11. How do classes, templates, and lambdas fit together? What have constructors and destructors to do with exceptions? What's in the standard library? How can we start using C++?

Finally, I will make a few comments about how to get from older styles of C++ use to modern C++ and point to areas where we need to improve C++ further.

Speakers
avatar for Bjarne Stroustrup

Bjarne Stroustrup

technical fellow, MorganStanley
C++: history, design, use, standardization, future; performance, reliability; software developer education;distributed systemsBio: www.stroustrup.com/bio.html


Monday September 16, 2019 08:45 - 10:30
Aurora A

11:00

The Best Parts of C++
This Session is the Opening Keynote of the Back to Basics Track.

C++ is a big language, and it gets bigger every year. Is C++ it too big? Do we just continue to make the language harder to learn? Or, perhaps, do these language additions actually make the language better and easier to use? We will take a pragmatic look at the changes brought to C++ over the years and what impact they have had on how we write code.

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http://cppbestpractices.com.I'm... Read More →


Monday September 16, 2019 11:00 - 12:00
Aurora A

11:00

An Overview of Standard Ranges
The ranges revolution is nearly upon us! C++20 will include concept-enabled, range-based versions of all the standard algorithms you know and love, as well as new “views” which can transform the way you write code. In this talk we’ll offer an overview of the ranges features currently in the C++20 draft, with examples of how you can use them to reduce verbosity, avoid bugs and improve the correctness of your code, and in some cases get better performance. We’ll also cover the currently-available ranges implementations that you can use today, without having to wait for the next version of the standard.

If you've heard the buzz around ranges and are wondering what they'll bring and how they'll benefit your code-base, then this is the talk for you.

Speakers
TB

Tristan Brindle

Tristan is a freelance developer, C++ trainer and BSI committee member based in London. He’s the author of NanoRange, a C++14-compatible Ranges implementation, and lead tutor for C++ London Uni, a not-for-profit organisation offering free weekly C++ classes for students in London... Read More →


Monday September 16, 2019 11:00 - 12:00
Summit 8/9

11:00

Compiler Explorer: Behind The Scenes
In the six years that Compiler Explorer has been running it has gone from a hacky bunch of shell and Javascript code running on a basement server, serving tens of requests a week to a slightly less hacky bunch of shell and Javascript code scaling out to many computers in the cloud handling tens of thousands of requests a day.

In this talk, Matt will explain the journey Compiler Explorer has been on, how it has changed over the years, and how it works now. Along the way Matt will show some of his favourite compiler optimisations discovered while using the site, some little-known Compiler Explorer features, and the future direction of the site.

Attendees should be aware there's not very much C++ content in this talk: it's mostly DevOps and blood, sweat and tears of a low-level C++ programmer trying to hack together a website, and discovering an amazing community along the way.

Speakers
avatar for Matt Godbolt

Matt Godbolt

Development Engineer, Aquatic Capital Management, LLC
Matt Godbolt is the creator of the Compiler Explorer website. He is passionate about writing efficient code. He has previously worked at a trading firm, on mobile apps at Google, run his own C++ tools company and spent more than a decade making console games. When he's not hacking... Read More →


Monday September 16, 2019 11:00 - 12:00
Summit 4/5

11:00

The C++20 Synchronization Library
In the decade since C++11 shipped, the hardware landscape has changed drastically. 10 years ago, we were still in the early stages of the concurrent processing revolution; 2 to 4 hardware threads were common and more than 10 was "many". Our tolerance for synchronization latency was greater; we were willing to pay microseconds and milliseconds.

Today, dozens and hundreds of threads are common, and "many" means hundreds of thousands. Concurrent applications are plagued by contention challenges that were unimaginable a decade ago. With the traditional tools we have today, programmers often have to choose between unacceptable contention and unacceptable high latency when synchronizing between threads.

The C++20 synchronization library brings solutions - new lightweight synchronization primitives that can efficiently marshall hundreds of thousands of threads:

- `std::atomic::wait`/`std::atomic::notify_*`: Efficient atomic waiting.
- `std::atomic_ref`: Atomic operations on non-`std::atomic` objects.
- `std::counting_semaphore`: Lightweight access coordination.
- `std::latch` and `std::barrier`: Marshalling groups of threads.

In this example-oriented talk, you'll learn how and when to use these new tools to build scalable, modern C++ applications that can run in parallel on virtually any hardware, from embedded controllers to server CPUs to modern GPUs.

Speakers
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

CUDA C++ Core Libraries Lead, NVIDIA
Bryce Adelstein Lelbach has spent nearly a decade developing libraries in C++. Bryce is passionate about C++ evolution and is one of the leaders of the C++ community. He is an officer of ISO/IEC JTC1/SC22/WG21, the C++ Standards Committee. Bryce chairs both the C++ Committee's Tooling... Read More →


Monday September 16, 2019 11:00 - 12:00
Aurora C

11:00

The C++20 Standard Library: Beyond Ranges
C++20 has a large number of new library features. This survey course provides students with a broad overview of the changes and new facilities in the C++20 standard library. Ranges are briefly discussed, but the focus is on the myriad of other standard library changes targeted at C++20. Fast paced, and chock full of example codes, this tutorial will focus on practical application of the new c++20 standard library facilities.

These include expanded chrono support, string output formatting, span, associative container enhancements, uniform container erasure, threading and atomics support, bit manipulation facilities, iostream updates, and various math utilities.  Note that due to time constraints some of these topics will be covered very briefly, but with pointers in the slides for futher study.

The tutorial is up to date with the latest working draft following the Cologne meeting and will include pointers to current implementations as well as the state of compiler support.

Speakers
avatar for Jeff Garland

Jeff Garland

CrystalClear Software
Jeff Garland has worked on many large-scale, distributed software projects over the past 25+ years. The systems span many different domains including telephone switching, industrial process control, satellite ground control, ip-based communications, and financial systems. He has written... Read More →


Monday September 16, 2019 11:00 - 12:00
Crest 4/5

11:00

Concepts: A Day in the Life
C++20 Concepts are right around the corner - and they are set to revolutionize the way we write generic code, allowing for much better code readability, error message readability and compile times; In this talk I will show how concepts can be used in a real project, and demonstrating those how these 3 traits indeed improve, using my implementation of the feature in the Clang compiler.

Come to this talk to see how concepts greatly simplify generic code, and how you can expect to use them in C++20.

Speakers
avatar for Saar Raz

Saar Raz

A tech and C++ enthusiast, Saar programs in C++ mostly in his free time. In late 2017, he volunteered to implement C++20 Concepts in the Clang compiler, and has been working on that since, having recently reached a feature-complete beta stage. Other than C++ and tech, Saar also likes... Read More →


Monday September 16, 2019 11:00 - 12:00
Aurora D

11:00

A C++ Approach to Physical Units
This talk presents a new C++20 library for Dimensional Analysis and Physical Units handling. The essential requirements of the library are user-friendliness, compile-time safety, no runtime overhead, and easy extensibility. The syntax of the library is built around a few easy to learn concepts and strictly checked at compile time, which makes it easy to learn and very forgiving for the novice.

The talk presents motivating examples of why we need such a library, compares the library with other similar products on the market, describes the basic usage and interface, and highlights the benefits of the design choices made.

The talk is also a great showcase of practical usage of new C++20 features that make the library interface easier to use, maintain, and extend. Concepts, contracts, class types provided as non-type template parameters, and other C++20 features make a huge difference in how we can design Modern C++ code.

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Chief Software Engineer | C++ Trainer, Epam Systems | Train IT
Software architect, chief developer, and security champion with more than 14 years of experience in designing, writing and maintaining C++ code for fun and living. C++ consultant, trainer, and evangelist focused on Modern C++. His main areas of interest and expertise are code performance... Read More →


Monday September 16, 2019 11:00 - 12:00
Crest 3

12:05

Book Signing: Bjarne Stroustrup
Bjarne will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Bjarne Stroustrup

Bjarne Stroustrup

technical fellow, MorganStanley
C++: history, design, use, standardization, future; performance, reliability; software developer education;distributed systemsBio: www.stroustrup.com/bio.html


Monday September 16, 2019 12:05 - 12:25
Bookstore

12:30

Trainers Panel I
Have you considered on-site training for your team?

Join a panel of professional C++ trainers discussing what you need to know about hiring an outsider to bring your team up to speed on C++ best practices and new features.

Moderators
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates
avatar for Dan Saks

Dan Saks

President, Saks & Associates
Dan Saks is the president of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Dan used to write the “Programming Pointers” column for embedded.com online. He has also written columns for numerous print publications... Read More →
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Siemens
Klaus Iglberger is a freelancing C++ trainer and consultant and is currently on the payroll of Siemens in Nuremberg, Germany. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced... Read More →
avatar for Stephen Dewhurst

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-author... Read More →


Monday September 16, 2019 12:30 - 13:30
Summit 4/5

13:35

Book Signing: Marc Gregoire
Marc will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Marc Gregoire

Marc Gregoire

Software Architect, Nikon Metrology
Marc Gregoire is a software architect from Belgium. He worked 6 years as a consultant for Siemens and Nokia Siemens Networks on critical 2G and 3G software running on Solaris for telecom operators. This required working with international teams stretching from South America and the... Read More →


Monday September 16, 2019 13:35 - 13:55
Bookstore

13:35

Book Signing: Rian Quinn
Rian will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Rian Quinn

Rian Quinn

CTO, Assured Information Security, Inc.
Dr. Rian Quinn is a Senior Principal Investigator in the Trusted Information Systems Group at Assured Information Security, Inc. were he has focused on trusted computing and hypervisor related technologies for nearly 10 years. He holds a Ph.D. in Computer Engineering with specializations... Read More →


Monday September 16, 2019 13:35 - 13:55
Bookstore

14:00

Back to Basics: Move Semantics (part 1 of 2)
Move semantics is one of the most complex topics in the world of C++, including many technical details that often confuse even experts. This interactive back-to-the-basics session is entirely focused on understanding the details behind move semantics. It explains the motivation behind move semantics, the need for rvalue references and std::move, the reason for forwarding references and std::forward, and how to properly apply move semantics. The many interactive questions and exercises will help to quickly adapt the newly gained knowledge.

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Siemens
Klaus Iglberger is a freelancing C++ trainer and consultant and is currently on the payroll of Siemens in Nuremberg, Germany. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced... Read More →


Monday September 16, 2019 14:00 - 15:00
Aurora C

14:00

Hello World From Scratch
"To make an apple pie from scratch, you must first invent the universe" —Carl Sagan

We’ll show how a Hello World program in C++ works from scratch, inventing the universe as we go along. We’ll demystify the journey your source code takes from textual representation to bytes executing on your processor. If you’ve ever wondered how the myriad of tools involved in translating and running C++ operate and fit together, then this talk is for you.

Topics covered will include stages of compilation, linkers, static/shared libraries, object file loading, operating system interaction, and maybe some apple pie.

Speakers
avatar for Peter Bindels

Peter Bindels

Software Engineer, TomTom
avatar for Simon Brand

Simon Brand

C++ Developer Advocate, Microsoft
Simon is Microsoft’s C++ Developer Advocate. Their background is in compilers and debuggers for embedded accelerators, but they’re also interested in generic library design, metaprogramming, functional-style C++, undefined behaviour, and making our communities more welcoming and... Read More →


Monday September 16, 2019 14:00 - 15:00
Crest 4/5

14:00

Algorithm Intuition (part 1 of 2)
Data structure intuition is something that develops naturally for most software developers. In all languages, we rely heavily on standard containers and collections. Need fast insertion/lookup? Hashmap. Need a sorted data structure that stores unique values? Set. Duplicate values? Multiset. And so on.

However, most software developers don't develop algorithm intuition quite as easily. Algorithms aren't taught as widely as data structures are, and aren't relied on as heavily. This talk aims to introduce some STL algorithms, show how they are commonly used, and show how by developing intuition about them (+ a little help from lambdas), you can unlock their true potential.

Speakers
avatar for Conor Hoekstra

Conor Hoekstra

Software Development Engineer, Amazon
Conor is extremely passionate about programming languages, algorithms and beautiful code. He spent 5 years in Canada working on a large-scale C++ codebase. In 2018, he moved down to Silicon Valley and has spent the last year working for Amazon using C++, Java, Python, Go, Perl and... Read More →


Monday September 16, 2019 14:00 - 15:00
Aurora D

14:00

What Every Programmer Should Know About Memory Allocation
Memory allocators are a critical part of the run-time system for languages such as C++. Over the last few decades, the requirements for general-purpose memory allocation have become significantly more complex with different allocators evolving to handle different workloads varying by process age, concurrency, allocation patterns, object sizes, access patterns and more. Unfortunately, many application developers are unaware of their internals and their respective limitations and this directly impacts their ability to debug both performance and correctness problems related to dynamic memory allocation.

This talk will introduce the current industry standard memory allocators (general-purpose and specialized), the categories of memory allocators and their intended workloads and shed some light into their design and implementation. With this foundation, we will review real world problems and their respective solutions, where application performance was significantly hindered or complex bugs were introduced. The audience will walk away with knowledge of (sometimes surprising) anti-patterns to avoid when making use of dynamic memory allocation, and new technologies and techniques to use for improving performance and reliability. We will investigate cases where the general purpose allocator interface fails, and when alternatives are better. Finally, we will reinforce our new-found understanding of some basic memory allocator internals to improve our ability to investigate and root cause heap corruption bugs that would otherwise take hours (sometimes even weeks) to fix.

Finally, we will look to the horizon and introduce some exciting new work being done in the area including memory allocator interfaces for improved spatial locality for related objects from both academia and industry.

Speakers
avatar for Samy Al Bahra

Samy Al Bahra

CTO, Backtrace
Samy Al Bahra is the cofounder of Backtrace, where he is helping build a modern debugging platform for today’s complex applications. Prior to Backtrace, Samy was a principal engineer at AppNexus, where he played a lead role in the architecture and development of many mission-critical... Read More →
HS

Hannes Sowa

Backtrace
PK

Paul Khuong

Vice President, Not Google
After toiling on his dissertation about mathematical optimisation methods for large-scale network design, Paul Khuong has spent the majority of his professional and hobbyist life reverse engineering and modernising C, C++, and Common Lisp legacy systems. When not engaged in code archaeology... Read More →


Monday September 16, 2019 14:00 - 15:00
Aurora A

14:00

Freestanding C++ - Past, Present, and Future
C++ is used in a wide variety of platforms and environments, some of which don't provide all of the features described in the C++ Standard. For example, C++ features that require operating system support may be unavailable in low-end embedded systems, or when implementing an operating system itself. To help programmers write highly portable code, the C++ Standard drew a line between the “freestanding” features that should be available everywhere and the “hosted” features that might not. But the line has always been blurry. As C++ continues to develop, more and more developers are asking where and how that line should be drawn.

This session explores the state of freestanding C++. It discusses the history behind freestanding C++, examines how it’s actually used (and not used), and looks at where it might be going in the future.

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates


Monday September 16, 2019 14:00 - 15:00
Crest 3

14:00

If You Can't Open It, You Don't Own It
For the past 30 years, we have dealt with penetrations into secure systems almost exclusively from the software layer: applications and operating systems. With the advent of side channel exploits like Spectre, Meltdown and Foreshadow, hardware designs are now battlefields. In this talk, we’ll look at four real-world hardware attacks that changed the way we think about secure systems and see how hardware exploit strategies drive software exploit strategies.
And what that means for the future of Modern C++.
We’ll explore four lines of attack:
  • Roots of Trust,
  • Side channels exploits,
  • How physical access creates opportunities, and
  • How our supply chains often create our greatest vulnerabilities.
As the Standards Committee puts the final touches on C++20 this year, we’ll use these as the framework to get an inside look at the committee’s efforts to build a safer, more resilient language. We’ll see:
  • How new language features, like Concepts, Contracts and Ranges, help (or hurt) our ability to write secure software.
  • How Undefined Behavior is explicitly used by compiler developers to generate high performance machine code and what that means for software security.
  • Which proposals coming for C++23, like Zero-overhead deterministic exceptions and secure_clear, will help address some of the worst vulnerabilities in the language.

This talk is about how our language and design choices affect our system’s ability to withstand attack. It’s also about how the evolution of the language is addressing the insecure world it operates in and the places where it still falls short.

Speakers
avatar for Matthew Butler

Matthew Butler

Laurel Lye LLC
Matthew Butler has spent the last three decades as a systems architect and software engineer developing systems for network security, law enforcement and the military. He primarily works in signals intelligence using C, C++ and Modern C++ to build systems running on hardware platforms... Read More →


Monday September 16, 2019 14:00 - 15:00
Summit 4/5

14:00

Writing Safety Critical Automotive C++ Software for High Performance AI Hardware:
How can we make C++ in a Safe and secure way?
It is about time we talk about what it takes to create safe software, especially for automotive. This talk is about the practical engineering challenges of turning deep learning, classical machine vision and sensor fusion algorithms from research prototypes into real-world automotive-grade systems. We will summarize the many safety critical standards in general for C++ and specifically for autonomous vehicles (AV). These include the updates to MISRA, AUTOSAR, and our own SG12 which has been processing updates from WG23 for C++. We have been working hard in these standards bodies and with industrial partners to deliver automotive-grade, safe, high performance AI software development tools.
We will further review C++ Directions that supports this and reveal the road map for what is possibly the earliest Safety Critical C++ that is also capable of heterogeneous dispatch for AV.

Speakers
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about
avatar for Gordon Brown

Gordon Brown

Principal Software Engineer, SYCL & C++, Codeplay Software
Gordon Brown is a principal software engineer at Codeplay Software specializing in heterogeneous programming models for C++. He has been involved in the standardization of the Khronos standard SYCL and the development of Codeplay's implementation of the standard from its inception... Read More →


Monday September 16, 2019 14:00 - 15:00
Summit 8/9

15:15

Back to Basics: Move Semantics (part 2 of 2)
Move semantics is one of the most complex topics in the world of C++, including many technical details that often confuse even experts. This interactive back-to-the-basics session is entirely focused on understanding the details behind move semantics. It explains the motivation behind move semantics, the need for rvalue references and std::move, the reason for forwarding references and std::forward, and how to properly apply move semantics. The many interactive questions and exercises will help to quickly adapt the newly gained knowledge.

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

C++ Trainer/Consultant, Siemens
Klaus Iglberger is a freelancing C++ trainer and consultant and is currently on the payroll of Siemens in Nuremberg, Germany. He has finished his PhD in computer science in 2010 and since then is focused on large-scale C++ software design. He shares his experience in popular advanced... Read More →


Monday September 16, 2019 15:15 - 16:15
Aurora C

15:15

Algorithm Intuition (part 2 of 2)
Data structure intuition is something that develops naturally for most software developers. In all languages, we rely heavily on standard containers and collections. Need fast insertion/lookup? Hashmap. Need a sorted data structure that stores unique values? Set. Duplicate values? Multiset. And so on.

However, most software developers don't develop algorithm intuition quite as easily. Algorithms aren't taught as widely as data structures are, and aren't relied on as heavily. This talk aims to introduce some STL algorithms, show how they are commonly used, and show how by developing intuition about them (+ a little help from lambdas), you can unlock their true potential.

Speakers
avatar for Conor Hoekstra

Conor Hoekstra

Software Development Engineer, Amazon
Conor is extremely passionate about programming languages, algorithms and beautiful code. He spent 5 years in Canada working on a large-scale C++ codebase. In 2018, he moved down to Silicon Valley and has spent the last year working for Amazon using C++, Java, Python, Go, Perl and... Read More →


Monday September 16, 2019 15:15 - 16:15
Aurora D

15:15

C++ ...Easy, Elegant, Powerful!
C++ can be easy, elegant, and powerful. We achieve obvious and robust code by leveraging static typing, lexical scoping, and destructors. By understanding simple patterns for object lifecycle, and employing only a few basic practices, we build performant and scalable systems that we control, understand, and can enhance.

This session is for those new to C++ (perhaps with experience in other languages), or for experienced C++ developers interested in clear articulation for “Why C++?” in discussion with colleagues using other languages. The conclusion quite clearly demonstrates through Computer Science Best Practice that easier reasoning and better scaling is achieved through core C++ language design choices. Topics include: Value and reference semantics, the type system, lexical and dynamic scoping, programming paradigms, and general purpose versus special-purpose languages.

Speakers
avatar for Charles Bay

Charles Bay

Charley Bay
Charley Bay has over three decades of experience using C++ in multiple regulated and high-performance fields focused on large-scale and distributed systems in performance-sensitive environments including time-sensitive processing of large data sets, performance visualization, real-time... Read More →


Monday September 16, 2019 15:15 - 16:15
Summit 4/5

15:15

Using Freestanding C++ to add C++17 to your Shellcode, UEFI, Embedded Systems and Unikernels.
This presentation is a must-see if you would like to learn how C++ works under the hood or how to include the Standard Library when compiling with "-ffreestanding". In this presentation, we will examine how C++ works behind the scenes as well as how to include C++ and the Standard Library in freestanding environments. Such environments include shellcode, UEFI, embedded systems (with no OS available), and unikernels. There are many environments where an OS is not present, or the facilities of the OS are inaccessible (for example with shellcode). In these environments, one compiles C/C++ with "-ffreestanding" to produce an executable with no external dependencies. The downside to this approach is the Standard Library is also not accessible, meaning useful functions such as std::unique_ptr, std::mutex, and std::list are not available. Furthermore, some core language facilities such as std::move, std::forward, and dynamic_cast are also unavailable as the Standard Library implements these.

This presentation teaches the audience how to overcome these problems by leveraging Libc++ from LLVM and Newlib to create a working, freestanding C++ environment with support for the Standard Library. Topics presented include how to compile a static, position independent executable (also called a static PIE) with support for C++ and the Standard Library, how to execute your project in a freestanding environment and what the limitations are and how to overcome them. Finally, this presentation will conclude with a demonstration of a UEFI application written in C++ as well as a demonstration of leveraging C++ in shellcode.

Speakers
avatar for Rian Quinn

Rian Quinn

CTO, Assured Information Security, Inc.
Dr. Rian Quinn is a Senior Principal Investigator in the Trusted Information Systems Group at Assured Information Security, Inc. were he has focused on trusted computing and hypervisor related technologies for nearly 10 years. He holds a Ph.D. in Computer Engineering with specializations... Read More →


Monday September 16, 2019 15:15 - 16:15
Crest 3

15:15

High performance graphics and text rendering on the GPU for any C++ application
Drawing an image or displaying text on the screen is accomplished by a process called rendering. Typically a text based application renders using the CPU while 3D games make heavy use of GPU rendering. It would be ideal if every application were able to render all their graphics and text using hardware acceleration on the GPU. Is this practical, feasible, or realistic?

In this presentation we will provide a brief introduction to graphics terminology and show some of the differences between OpenGL, Direct3D, Vulkan, and Metal, as well as the overall process to render. We will explain what obstacles a developer will encounter using a Graphics API and present useful and practical alternatives.

Several examples will be provided to illustrate the exact steps required to configure and render using a specific Graphics API. Since this is a daunting and overwhelming task we will show strategies to streamline the entire process.

As part of this talk we will explain why rendering text is more complicated than just drawing some letters on the screen. There is a difference between text shaping and font rasterization which matters if you want your application to be readable on all platforms. As an example, we will show the pros and cons of the native text rendering on Windows.

A key part of the talk will introduce the idea of reusable and composable graphics buffers which can reduce the load on the rendering hardware. This approach provides an efficient way to render graphics.

A brief overview of shaders, pipelines, and textures will be shown to illustrate the power of graphics, even for a general purpose GUI application.

Familiarity with C++ is advisable, no prior knowledge of graphics is required however it may be helpful.

Speakers
avatar for Barbara Geller

Barbara Geller

Co-Founder, CopperSpice
I am an independent consultant with over twenty-five years of experience as a programmer and software developer. I have worked with numerous smaller companies developing in-house applications. I have also designed and developed Windows applications for several vertical markets including... Read More →
avatar for Ansel Sermersheim

Ansel Sermersheim

Cofounder, CopperSpice
I have been working as a programmer for nearly twenty years. My degree is in Computer Science from Cal Poly San Luis  Obispo. I have transitioned to independent consulting and I am currently working on a project for RealtyShares in San Francisco. Co-founder of CopperSpice... Read More →


Monday September 16, 2019 15:15 - 16:15
Crest 4/5

15:15

Programming with C++ Modules: Guide for the Working
Modules are coming. The primary objective of this talk is to help the practicing software developer prepare for their effective usage. It examines software architecture requirements for programming in the large and linguistic support offered by the coming C++20 standards. The talk augments the programmer’s toolbox with new programming techniques based on componentization and isolation offered by C++ modules. Finally, it shows how the practitioner can start experimenting with these ideas with in-development compilers such as MSVC, GCC, and Clang.

Speakers
avatar for Gabriel Dos Reis

Gabriel Dos Reis

Principal Software Engineer, Microsoft
Gabriel Dos Reis is a Principal Software Engineer at Microsoft, where he works in the area of large scale software construction, tools, and techniques. He is also a researcher, and a longtime member of the C++ community, author and co-author of numerous extensions to support large... Read More →


Monday September 16, 2019 15:15 - 16:15
Aurora A

15:15

When C++ Style Guides Contradict
C++ is a success story. One reason is its backward compatibility.
But that also makes C++ more or more unteachable.
Too many features, too many rules, too many inconsistences.

So, the only solution (beside clean-ups for simple rules) are good style guides.
However, these style guides contradict significantly.
For example, while some recommend to define operations as non-member non-friend,
others recommend to use hidden friends.
Or when should we define virtual destructors?
Or the details of the rule of 0, 3, 5, "5 or 3".
Or how to initialize an object.

I have no clear solution.
But it's time to open the stage for a consolidation of the situation.
At least in the interest of all the average programmers who do not know all the rules (well, yes, nobody does).

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries.He is well known in the programming community because he not only speaks and... Read More →


Monday September 16, 2019 15:15 - 16:15
Summit 8/9

16:45

Back to Basics: Const as a Promise
The const qualifier has various uses in C++. One of the most valuable uses is in declaring function headings that constrain the effects of function calls. Using const appropriately can reduce bugs and development time by turning potential run-time errors into compile-time errors that are much easier to find and correct. Using const can even reduce your program’s code size and execution time.

Despite these benefits, too many C++ programmers still use const reactively rather than proactively. That is, they tend to add const as needed to quell compiler error messages, rather than design const in as they code. To get the most out of const, programmers really need to understand (1) when and where to place const in declarations, (2) when to leave it out entirely, and (3) how type conversions involving const behave.

The key insight about const is to understand const as a promise—a promise not to modify something. This session explains the real meaning of that promise and how that insight can guide you in declaring function parameters and return types. It also explains why you shouldn’t declare by-value parameters and return types as const, why overloading on const is such a useful and ubiquitous idiom, and why it is meaningful to declare constexpr member functions as const.

Speakers
avatar for Dan Saks

Dan Saks

President, Saks & Associates
Dan Saks is the president of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Dan used to write the “Programming Pointers” column for embedded.com online. He has also written columns for numerous print publications... Read More →


Monday September 16, 2019 16:45 - 17:45
Aurora C

16:45

Latest & Greatest in Visual Studio 2019 for C++ developers
Visual Studio 2019 was released earlier this year, and it brings new experiences for C++ developers targeting any platform, not just Windows. Modeled based on our previously successful talks at CppCon, this year we'll give the community an update on how we're progressing towards C++20 conformance and we'll cover many of the new productivity features in the latest updates of Visual Studio 2019, including CMake integration, Linux targeting, MSVC compiler and debugger advancements and more. You will also have a sneak preview of the new features coming in later in 2019 that we have never shared before. You will learn new tricks that you can apply immediately upon leaving the session as well as get a sense of what is coming in the future. The main message is that Visual Studio and Visual Studio Code will make every C++ developer (not just Windows developers) more productive

Speakers
avatar for Marian Luparu

Marian Luparu

Principal Program Manager Lead, Microsoft
Ask me about @Code @VisualStudio and #Vcpkg
avatar for Simon Brand

Simon Brand

C++ Developer Advocate, Microsoft
Simon is Microsoft’s C++ Developer Advocate. Their background is in compilers and debuggers for embedded accelerators, but they’re also interested in generic library design, metaprogramming, functional-style C++, undefined behaviour, and making our communities more welcoming and... Read More →


Monday September 16, 2019 16:45 - 17:45
Summit 4/5

16:45

From Algorithm to Generic, Parallel Code
This presentation starts with a parallel algorithm as it is described in books and turns it into a generic implementation. Multiple options for running the algorithm concurrently based on different technologies (OpenMP, Threading Building Blocks, C++ standard-only) are explored.

Using parallel algorithms seems like an obvious way to improve the performance of operations. However, to utilize more processsing power often requires additional work to be done and depending on available resources and the size of the problem the parallel version may actually take longer than a sequential version. Looking at the actual implementation for an algorithm should clarify some of the tradeoffs.

Showing how a parallel algorithm can be implemented should also demonstrate how such an algorithm can be done when there is no suitable implementation available from the [standard C++] library. As the implementation of a parallel algorithms isn't trivial it should also become clear that using a readily available implementation is much preferable.

Speakers
DK

Dietmar Kuhl

Engineer, Bloomberg LP
Dietmar Kühl is a senior software developer at Bloomberg L.P. working on the data distribution environment used both internally and by enterprise installations at clients. Before joining Bloomberg he has done mainly consulting for software projects in the finance area. He is a regular... Read More →


Monday September 16, 2019 16:45 - 17:45
Summit 8/9

16:45

Value Proposition: Allocator-Aware (AA) Software
The performance benefits of supplying local allocators are well-known and substantial [Lakos, CppCon’17]. Still, the real-world costs associated with orchestrating the integration of allocators throughout a code base, including training, supporting tools, enlarged interfaces (and contracts), and a heightened potential for inadvertent misuse cannot be ignored. Despite substantial upfront costs, when one considers collateral benefits for clients – such as rapid prototyping of alternative allocation strategies – the case for investing in a fully allocator-aware (AA) software infrastructure (SI) becomes even more compelling. Yet there remain many “concerns” based on hearsay or specious conjecture that is either overstated or incorrect.

In this densely fact-infused talk, we begin by introducing a familiar analogy to drive home the business case for AASI. Next we identify four syntactic styles based on three distinct models: C++11, C++17, and a brand new language-based approach being developed by Bloomberg for C++23 (or later). Costs – both real and imagined – will be contrasted with performance as well as other important (“collateral”) benefits. The talk will conclude with a closer look at the economic imperative of pursuing a low-cost language-based alternative to AA software in post-modern C++.

Speakers
avatar for John Lakos

John Lakos

Software Engineer, Bloomberg
John Lakos, author of Large-Scale C++ Software Design, serves at Bloomberg LP in New York City as a senior architect and mentor for C++ Software Development world-wide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working Group. Previously, Dr... Read More →


Monday September 16, 2019 16:45 - 17:45
Crest 3

16:45

Concepts in C++20: Revolution or Evolution
The key idea of generic programming with templates is it to define functions and classes which
can be used with various types. Often it happens that you instantiate a template with the wrong
type. The result is typically a few pages of cryptic error messages. This sad story ends with
concepts. Concepts empower you to write requirements for your templates which can be
checked by the compiler. Concepts revolutionise the way, we think about and write generic
code. Here is why:

* Requirements for templates are part of the interface.

* The overloading of functions or specialisation of class templates can be based on concepts.

* We get improved error message because the compiler compares the requirements of the template parameter with the actual template arguments.

However, this is not the end of the story.

* You can use predefined concepts or define your own.

* The usage of auto and concepts is unified. Instead of auto, you can use a concept.

* If a function declaration uses a concept, it automatically becomes a function template. Writing function templates is, therefore, as easy as writing a function.

Speakers
avatar for Rainer Grimm

Rainer Grimm

Trainer, Modernes c++


Monday September 16, 2019 16:45 - 17:45
Aurora D

16:45

Reflections: Compile-time Introspection of Source Code
Static reflection is a forthcoming feature in the C++ programming that promises powerful new features for compile-time introspection of user source code. This feature, supported by increasingly capable constexpr facilities, will potentially be the Next Big Thing for C++23. This talk will cover the core concepts of reflection and reification and discuss several methods of providing language support for those features, including the approach taken by current Reflection TS and alternative approaches that are currently being considered. The remainder of the talk will focus on language and engineering concerns associated with static reflection. In particular, the pervasive use of constexpr functions to Reflect All the Things may cause compile times to balloon. However, I generally believe the benefits of reflection outweigh the potential costs, and if used judiciously, I think there will be only benefits.

Speakers
avatar for Andrew Sutton

Andrew Sutton

Owner, Lock3 Software, LLC
Andrew Sutton is an owner of Lock3 Software, LLC, a software research and development company in Kent, Ohio. His spends his days working on C++ language extensions in Clang and GCC and working on various WG21 language proposals.His past work included the design, specification, and... Read More →


Monday September 16, 2019 16:45 - 17:45
Aurora A

16:45

Preventing Spectre One Branch at a Time: The Design and Implementation of Fine Grained Spectre v1 Mitigation APIs
Spectre is the first in a new class of security vulnerabilities which require programmers and the compiler to deal with microarchitectural details made visible during speculative execution. There are several API options which allow programmers to mitigate specific branches or pointers that are vulnerable to Spectre v1 in order to limit the performance impact of mitigation. In this talk, Devin and Zola will describe the unusual challenges in designing and implementing fine-grained Spectre (variant 1) mitigations, give an overview and demo of the APIs that exist today, and discuss the future of the APIs including the standardization proposal that is in progress.

Recommended background:
CppCon 2018: Chandler Carruth “Spectre: Secrets, Side-Channels, Sandboxes, and Security” https://www.youtube.com/watch?v=_f7O3IfIR2k

Speakers
ZB

Zola Bridges

Software Engineer, Google
Zola Bridges works on the C++ Security team at Google. She has worked primarily on Speculative Load Hardening in LLVM.
DJ

Devin Jeanpierre

Software Engineer, Google


Monday September 16, 2019 16:45 - 17:45
Summit 6/7

16:45

Quickly Testing Legacy C++ Code with Approval Tests
You've inherited some legacy code: it's valuable, but it doesn't have tests, and it wasn't designed to be testable, so you need to start refactoring. But you can't refactor safely until the code has tests, and you can't add tests without refactoring! How can you ever break out of this loop?

Whether Legacy code for you means "old code", "code without tests", or "code you wish to redesign for new features or unit-tests", this talk will enable you to become productive and work safely, quickly.

The simplicity, convenience, ease-of-use, power and flexibility of Llewellyn Falco's "Approval Tests" approach has long been proven in a dozen programming languages. And now all this is now available to C++ developers too!

Clare will present a small but surprisingly effective C++11 library for applying "Approval Tests" to cross-platform C++ code - for both legacy and green-field systems, and with a range of testing frameworks.

She will describe its use in some real-world situations, including how to quickly lock down the behaviour of legacy code. She will show how to quickly achieve good test coverage, even for very large sets of inputs. Finally, she will describe some general techniques she learned along the way.

Attendees will discover some quick, practical techniques to use for common challenges, such as testing outputs containing dates and times, that can be applied very easily using Approval Tests.

Speakers
avatar for Clare Macrae

Clare Macrae

Director, Clare Macrae Consulting Ltd
Clare has worked in software development for over 30 years, and in C++ for 20 years. Since 2017, she has used her spare time to work remotely with Llewellyn Falco on [ApprovalTests.cpp](https://github.com/approvals/ApprovalTests.cpp), to radically simplify testing of legacy code... Read More →


Monday September 16, 2019 16:45 - 17:45
Crest 4/5

17:00

Speaker Portraits
Jonathan will be taking portrait photos of speakers.

Monday September 16, 2019 17:00 - 18:00
Conference Room A

18:00

Beverages with Backtrace
Join us for a cocktails on Monday, 9/16 and let's kick CppCon off right.

Looking forward to seeing you there.

Space is limited - RSVP required.


Speakers
KB

Karla Bueno

Community Manager, Backtrace

Sponsors
KB

Karla Bueno

Community Manager, Backtrace


Monday September 16, 2019 18:00 - 20:00
Social Hall (Aurora B)

18:00

Students' Dinner
This Students' Dinner is open to any full-time student that is registered for CppCon 2019.

If you are a full-time student registered for CppCon 2019 and have not been sent an invitation, please contacts students@cppcon.org.

Staff
avatar for Michał Dominiak

Michał Dominiak

System Software Engineer, Nvidia


Monday September 16, 2019 18:00 - 20:00

20:30

Committee Fireside Chat
Building on Bjarne Stroustrup’s morning keynote of the same title, this is a “what’s now + what’s next” panel with representative members of the C++ standards committee.

Besides C++’s creator, the panelists include the current leaders of key subgroups who are responsible for language and library evolution, including especially compile-time programming and tooling, which are perhaps the two biggest keys to C++’s next decade as the committee continues to aggressively pursue compile-time reflection and general constexpr code, as well as module and package management support.

The panel also includes representation of fresh forward-looking thinking among our newer committee members as the committee itself continues to rapidly grow and expand.


Moderators
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →

Speakers
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

CUDA C++ Core Libraries Lead, NVIDIA
Bryce Adelstein Lelbach has spent nearly a decade developing libraries in C++. Bryce is passionate about C++ evolution and is one of the leaders of the C++ community. He is an officer of ISO/IEC JTC1/SC22/WG21, the C++ Standards Committee. Bryce chairs both the C++ Committee's Tooling... Read More →
avatar for Lisa Lippincott

Lisa Lippincott

Software Architect, Tanium
Lisa Lippincott designed the software architectures of Tanium and BigFix, two systems for managing large fleets of computers. She's also a language nerd, and has contributed to arcane parts of the C++ standard. In her spare time, she studies mathematical logic, and wants to make computer-checked... Read More →
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
avatar for Titus Winters

Titus Winters

C++ Codebase Cultivator, Google
Titus Winters has spent the past 6 years working on Google's core C++ libraries. He's particularly interested in issues of large scale software engineer and codebase maintenance: how do we keep a codebase of over 100M lines of code consistent and flexible for the next decade? Along... Read More →
avatar for Vittorio Romeo

Vittorio Romeo

Software Engineer, Bloomberg
Vittorio Romeo (B.Sc. Computer Science) has been a Software Engineer at Bloomberg for more than 3 years, working on mission-critical company C++ infrastructure and providing Modern C++ training to hundreds of fellow employees.He began programming around the age of 8 and quickly became... Read More →
avatar for Marshall Clow

Marshall Clow

Engineer, C++ Alliance
Marshall has been programming professionally for 35 yearsHe is the author of Boost.Algorithm, and has been a contributor to Boost for more than 15 years. He is the chairman of the Library working group of the C++ standard committee. He is the lead developer for libc++, the C++ standard... Read More →
avatar for Bjarne Stroustrup

Bjarne Stroustrup

technical fellow, MorganStanley
C++: history, design, use, standardization, future; performance, reliability; software developer education;distributed systemsBio: www.stroustrup.com/bio.html
avatar for JF Bastien

JF Bastien

Compiler engineer, Apple
JF is a compiler engineer. He leads C++ development at Apple.
avatar for Hana Dusíková

Hana Dusíková

Senior Researcher, AVAST
Hana is working as a senior researcher in Avast Software. Her responsibility is exploring new ideas and optimizing existing ones. She also propagates modern C++ techniques and libraries in internal techtalks and gives talks at local C++ meetups.She studied computer science at Mendel... Read More →
avatar for David Stone

David Stone

Software Engineer, Uber
David Stone works on autonomous vehicles at Uber in Louisville, Colorado. He is a member of the C++ standardization committee, where he chairs the Modules Study Group (SG2) and is the vice chair of the Evolution Working Group. He has written an algorithm that solved the traveling... Read More →


Monday September 16, 2019 20:30 - 22:00
Aurora A
 
Tuesday, September 17
 

08:00

Threading Design Decisions in AutoCAD for Web & Mobile
Porting AutoCAD Desktop to support web & mobile platforms is a grand challenge. AutoCAD has been around for more than 35 years, and its code base is written in C/C++ in such a manner that the code itself is a history book. Suffice to say, it aged well. In the modern era it is vital make software available for use from any device. We've managed to get AutoCAD running on iOS, Android and the Web.

One of the initial challenges we've tackled is how can we create a cross platform mechanism of cross-thread communications that will be robust enough to work anywhere. In this presentation I will talk about the design decisions revolving around achieving that and how those decisions returned and still return dividends all across the board.

Speakers
avatar for Max Raskin

Max Raskin

Tech Lead, Autodesk
Max is a software engineer and has been into programming since childhood, he's been programming professionally for 13 years now. His experience spans Web, Mobile and Desktop development - php, Javascript, Python, Java, C#, ObjC and Swift, but his true calling has always been C... Read More →


Tuesday September 17, 2019 08:00 - 08:45
Summit 8/9

09:00

Back to Basics: RAII and the Rule of Zero
RAII, or "Resource Allocation is Initialization," is one of the cornerstones of C++. What is it, why is it important, and how do we use it in our own code?

Small resource-managing classes should follow the Rule of Three (or Five); larger, composite, business-logic classes should follow the Rule of Zero. We'll explain these "Rules," what they mean, and how their consistent application helps us avoid resource leaks and double-frees. We'll also show how thinking about the Rule of Three can lead to a consistent guideline for polymorphic classes with virtual destructors.

Finally, we'll touch on the "copy and swap" idiom, which in many cases can reduce the Rule of Five to the Rule of Four (and a Half).

Attendees will leave this session with a clearer understanding of resource management in C++.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Arthur O'Dwyer is the author of "Colossal Cave: The Board Game," "Mastering the C++17 STL" (the book), and "The STL From Scratch" (the training course). He runs professional C++ training courses, is occasionally active on the C++ Standards Committee, and has a blog mostly about C... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Aurora A

09:00

A Short Life span<> For a Regular Mess
By now you probably heard about “Regular Types and Why Do I Care” :)
This would be Part 2 of the journey we’ll take together, where we get a chance to explore std::span<T> through our Regular lens. Don’t worry if you’ve missed Part 1; we’ll have plenty of time to revisit the important bits, as we prepare to span our grasp into C++20.
“Regular” is not exactly a new concept. If we reflect back on STL and its design principles, as best described by Alexander Stepanov in his “Fundamentals of Generic Programming” paper, we see that regular types naturally appear as necessary foundational concepts in programming. Why do we need to bother with such taxonomies ? Because STL assumes such properties about the types it deals with and imposes such conceptual requirements for its data structures and algorithms to work properly. C++20 Concepts are based on precisely defined foundational type requirements such as Semiregular, Regular, EqualityComparable, etc.
Recent STL additions such as std::string_view, std::reference_wrapper, std::optional, as well as new incoming types for C++20 like std::span or std::function_ref raise new questions regarding values types, reference types and non-owning “borrow” types. Designing and implementing regular types is crucial in everyday programing, not just library design. Properly constraining types and function prototypes will result in intuitive usage; conversely, breaking subtle contracts for functions and algorithms will result in unexpected behavior for the caller.
This talk will explore the relation between Regular types (and other concepts) and new STL additions like std::span<T> with examples, common pitfalls and guidance.

Speakers
avatar for Victor Ciura

Victor Ciura

Principal Engineer, CAPHYON
Victor Ciura is a Principal Engineer at CAPHYON, Technical Lead on the Advanced Installer team and a Microsoft MVP (Developer Technologies).He’s a regular guest at Computer Science Department of his Alma Mater, University of Craiova, where he gives student lectures & workshops on... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Crest 3

09:00

C++ as a First Language... Really?
C++ is seen as a complex language to teach. There are many reasons to think that: the language if taken as a whole is huge, its complexity daunting.

That goes, to be honest, for many programming languages: programming is a complex and stimulating activity, and C++'s growth mirrors the fact that is has been used to solve complex problems in efficient ways.

However, introducing C++ to beginners or to people coming from other languages is feasible, and is done every day. Amusingly, so-called "modern" C++ actually makes the language more approachable in many ways. Instead of starting with the traditional "basics" such as arrays and pointers, one can treat these as more advanced topics, and introduce the language through more contemporary abstractions.

What this talk aims to do is to show, through comparisons of solutions written in C++ with solutions written in other languages (mainly C# and Java), how C++ can be used as an introductory language as easily as other reputedly-easier-on-beginners languages, while still paving the way for the introduction of reputedly-more-difficult features.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 25 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Summit 6/7

09:00

Rethinking the Way We Do Templates in C++
Template metaprogramming is hard. In case it is hard only for the library implementer then it is not that bad. The problem arises when it also affects the users of this library.

This talk is summarizing my experience and thoughts gathered during the implementation of the Physical Units Library for C++. The way we do template metaprogramming now results with inscrutable compile-time errors and really long type names observed while debugging our code. That is mostly caused by aliasing class template specializations of non-trivial metaprogramming interface designs. Compilation times of such code also leave a lot of room for improvement, and the practices we chose to use in the Standard Library are often suboptimal. Taking into account the Rule of Chiel while designing templated code makes a huge difference in the compile times. This talk presents a few simple examples (including the practices from the C++ Standard Library) of achieving the same goal in different ways and provides benchmark results of time needed to compile such source code.

Speakers
avatar for Mateusz Pusz

Mateusz Pusz

Chief Software Engineer | C++ Trainer, Epam Systems | Train IT
Software architect, chief developer, and security champion with more than 14 years of experience in designing, writing and maintaining C++ code for fun and living. C++ consultant, trainer, and evangelist focused on Modern C++. His main areas of interest and expertise are code performance... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Aurora C

09:00

Deep CMake for Library Authors
This talk presents a road map for C++ library authors grappling with cross-platform aspects of library development and deployment. It highlights key CMake features that every cross-platform library project should be using and digs deeper into the platform-specific quirks and conventions behind them. The material presented will give library authors more robust control over their API, smoother integration with major platforms and packaging systems, and more convenient inclusion by other projects.

The presentation will firstly examine how symbol visibility, library versioning and API evolution can be handled coherently across all major platforms and compilers. CMake provides dedicated features for these that are easy to use, but with the deeper understanding provided by this talk, library authors will be able to make these areas work together more seamlessly and avoid future maintenance and compatibility issues.

We will then explore how platform and vendor differences affect the installed directory layout for projects with libraries. CMake features for transparently handling the different conventions and policies will be presented, including recent CMake improvements which simplify this task. The importance of RPATH/RUNPATH functionality for improved runtime robustness and ease of use will also be explained, along with some associated support CMake provides.

Along the way, the talk will mention a number of specific things that CMake library projects should do or avoid to make themselves easy for other projects to consume. This will include versioning support for CMake config package files, guidance on defining install components and accounting for the different ways that projects may incorporate yours into their build.


Speakers
avatar for Craig Scott

Craig Scott

Founder, Crascit Pty Ltd
Craig is a CMake co-maintainer and author of the book “Professional CMake: A Practical Guide”. He has been developing cross-platform C++ software since 2001, targeting most major platforms and working on large scale frameworks, scientific algorithm development, Qt GUI applications... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Crest 4/5

09:00

Practical C++ Modules
Modules are merged into the C++20 draft which means we now have a good idea what to expect, functionality-wise. Tooling support is also not far behind with compiler and build system vendors making steady progress. So we've got modules, but what now? How do we start using modules in our projects?

The aim of this talk is to answer the "What (& Why)", "How", and "When" of C++ Modules: what are modules (& why do we need them), how to apply them to new and existing codebases, as well as when can we start the migration.

We begin with a brief introduction to modules (structure, partitions, header units, include translation) and their relation to other physical design mechanisms (namespaces, headers, libraries, packages). We will also get a basic understanding of the underlying build mechanics which turns out to be necessary to use modules effectively.

Next we dive into the practical aspects of using modules: should we start with header units or go straight to proper modules? If header units, then should we use explicit import or rely on include translation? And if proper modules, then what is the appropriate module granularity? How to name our modules? Split or not to split (into module interface/implementation units)? And what about module distribution?

We conclude the talk by discussing the state of compilers, build systems, and (system) headers with regard to modules and whether now is a good time to start a new or modularize an existing project.

Speakers
avatar for Boris Kolpackov

Boris Kolpackov

Chief Hacking Officer, Code Synthesis
Boris Kolpackov is a founder and CHO (Chief Hacking Officer) at Code Synthesis, a company focusing on the development of open-source tools and libraries for C++. For the past 10 years Boris has been working on solving interesting problems in the context of C++ using domain-specific... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Aurora D

09:00

Will Your Code Survive the Attack of the Zombie Pointers?
Both the C++ and C standards currently specify that all pointers to an object become invalid (in the case of C, "indeterminate") at the end of that object's lifetime. In other words, your program's nice well-behaved pointers become vicious zombies. This transformation to zombies permits some additional diagnostics and optimizations, some deployed and some hypothetical, but it is not consistent with long-standing usage, especially for a range of concurrent and sequential algorithms that rely on loads, stores, and equality comparisons of such pointers. In fact, a few long-standing concurrent algorithms rely on assembly-language-style reincarnation of a zombie pointer when a new object is allocated at that same address.

This presentation gives an overview of several of these algorithms and discusses a range of possible ways of rehabilitating zombie pointers.

Speakers
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about
avatar for Paul E. McKenney

Paul E. McKenney

Distinguished Engineer, IBM Linux Technology Center
Paul E. McKenney has been coding for almost four decades, more than half of that on parallel hardware, where his work has earned him a reputation among some as a flaming heretic. Over the past decade, Paul has been an IBM Distinguished Engineer at the IBM Linux Technology Center... Read More →
avatar for Maged Michael

Maged Michael

Engineer, Facebook
Maged Michael is a software engineer at Facebook. He is the inventor of hazard pointers, lock-free malloc and several algorithms for concurrent data structures. He received a Ph.D. in computer science from the University of Rochester. He is an ACM Distinguished Scientist. He is an... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Summit 4/5

09:00

Error Handling is Cancelling Operations
When we first learn how to write programs, especially how to handle errors, we are given lots of advice saying do this, don't do that. Sometimes with rationale and sometimes not; but it is often difficult to make mental model that would make it easy to understand why we are doing it this way and not another, and why we have to follow this and this rule.

In this talk I will share an important observation: error handling -- be it error codes, errno, exceptions, error monad -- is about cancelling dependent operations. If we understand this, lots of recommended practices immediately start to make sense and become intuitive.

Speakers
avatar for Andrzej Krzemieński

Andrzej Krzemieński

Software developer, Sabre Polska
Andrzej is a software developer since 2004. He works mostly with C++ in commercial software, which includes safety-related and high-performance systems. He is a member of the C++ Standards Committee and a Boost developer. He is also a co-organizer of C++ User Group Krakow. Known to... Read More →


Tuesday September 17, 2019 09:00 - 10:00
Summit 8/9

10:30

"Allegro" Means Both Fast and Happy. Coincidence?
In all likelihood, sorting is one of the most researched classes of algorithms. It is a fundamental task in Computer Science, both on its own and as a step in other algorithms. 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 sorting algorithms. And as they say, the road matters more than the destination. Along the way, we'll encounter many wondrous surprises and we'll learn how to cope with the puzzling behavior of modern complex architectures.

Speakers
avatar for Andrei Alexandrescu

Andrei Alexandrescu

Vice President and Treasurer, The D Language Foundation
Andrei Alexandrescu is a researcher, software engineer, and author. He wrote three best-selling books on programming (Modern C++ Design, C++ Coding Standards, and The D Programming Language) and numerous articles and papers on wide-ranging topics from programming to language design... Read More →


Tuesday September 17, 2019 10:30 - 12:00
Aurora A

12:05

Book Signing: Herb Sutter
Herb will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.


Tuesday September 17, 2019 12:05 - 12:25
Bookstore

12:30

CppCon Program Committee
If you are on the CppCon Program Committee or if you have considered joining, this session is for you. This will be our first opportunity to meet as a group, face to face.

We'll discuss the CppCon PC Reviewer's Guide and share ideas about how to inprove the submission review process for all involved, including submitters.

Our goal is to have a common understanding what session ratings mean and what our role is in the program development process.


Moderators
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

CUDA C++ Core Libraries Lead, NVIDIA
Bryce Adelstein Lelbach has spent nearly a decade developing libraries in C++. Bryce is passionate about C++ evolution and is one of the leaders of the C++ community. He is an officer of ISO/IEC JTC1/SC22/WG21, the C++ Standards Committee. Bryce chairs both the C++ Committee's Tooling... Read More →

Speakers
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →


Tuesday September 17, 2019 12:30 - 13:30
Summit 4/5

12:30

SG20 Panel: Let's Talk About Education
(This panel is a part of the CppCon Student Program, but is addressed to everybody interested in this topic.)

SG20 is one of the ISO C++ Committee Study Groups - smaller subgroups of the committee, dedicated to discussing specific topics. The topic of interest for SG20 is education, and its goal is to produce guidelines for building modern course materials for teaching C++.

At this panel, you will have an opportunity to meet some of the SG20 members, who will introduce you to how SG20 works, but who will also ask you about your experience receiving C++ education. We'd like to gather feedback from (current, but also former!) students on what their C++ teachers did right, what they did wrong, and what they would like their education to look like.

Please come and provide your feedback on this topic, and you may have impact on how future C++ programmers are taught the language!

Moderators
avatar for Michał Dominiak

Michał Dominiak

System Software Engineer, Nvidia

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Engineer, Codeplay Software
Christopher Di Bella is a Staff Software Engineer for Codeplay’s ComputeCpp Runtime Technology. He is a strong proponent for generic programming in C++ and C++ education. Chris was previously a software developer for Nasdaq, and a tutor for UNSW Australia’s COMP6771 Advanced C... Read More →


Tuesday September 17, 2019 12:30 - 13:30
Crest 4/5

13:35

Book Signing: Anthony Williams
Anthony will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Tuesday September 17, 2019 13:35 - 13:55
Bookstore

14:00

Back to Basics: Atomics, Locks, and Tasks (part 1 of 2)
The history of concurrent programming in C++ is short. It began in 2011. At first peek, C++11, and later C++-standards support only the abstractions for library developers but not for application developers.
But the second view gives more details. Using the right techniques and the right abstraction make it possible to use the concurrent features safely.

This class shows you the safe way:

- How you can use atomics for simple jobs.
- How locks help to master shared state without the inherent danger of mutexes.
- How tasks are a significant improvement to threads and are part of the future and not of the past. Tasks allow you to
* share state without the need of synchronisation.
* manage values, notifications, and exceptions in a concurrent environment.
* create producer/consumer workflows without the highly error-prone condition variables.
- How to use concurrency in a declarative style with the parallel STL.

Speakers
avatar for Rainer Grimm

Rainer Grimm

Trainer, Modernes c++


Tuesday September 17, 2019 14:00 - 15:00
Aurora A

14:00

Speaker Portraits
Jonathan Phillips will be taking portrait photos of speakers.


Tuesday September 17, 2019 14:00 - 15:00
Conference Room A

14:00

Better Code with C++ Attributes
Modern C++ attributes such as [[noreturn]] and [[deprecated]] can be used to improve code quality and programmer productivity. They provide valuable information to the compiler, allowing it to generate more efficient code and provide more useful warning messages. C++20 is slated to include several new attributes, including [[no_unique_address]] and the design-by-contract attributes. They also let you use compiler extensions on specific toolchains without locking you into using only those toolchains.

This session explores several C++ attributes and provides examples of how to use each one to improve your programs. Although it focuses on the standard attributes, it also includes examples of non-standard attributes from specific toolchains.

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates


Tuesday September 17, 2019 14:00 - 15:00
Summit 8/9

14:00

The Business Value of a Good API
As C++ programmers, we use APIs every day, whether it is at the library level, the subsystem level, or the individual component level. And yet, using many existing APIs is often an unsatisfying experience, for any number of reasons: poor documentation, confusing component interfaces, muddled abstractions, broken/missing functionality, etc.

So how can we distinguish between a good API and a bad API? More importantly, how can we make the argument to our managers that good APIs, whether obtained off-the-shelf or built in-house, are a prudent investment?

This talk seeks to discuss these questions and perhaps provide some answers. We'll look at specific criteria for evaluating the goodness and/or badness of an API. We'll cover the concepts of technical debt and software capital, and define a relationship between them and API goodness/badness. We'll also discuss a simple iterative process for building APIs which can help avoid technical debt and increase software capital. Finally, we'll cover some recommendations for doing evaluations, using the process in day-to-day work, and convincing management of your wisdom.

Speakers
avatar for Bob Steagall

Bob Steagall

Chief Cook and Bottle Washer, KEWB Computing
I've been working in C++ since discovering the second edition of The C++ Programming Language in a college bookstore in 1992. The majority of my career has been spent in medical imaging, where I led teams building applications for functional MRI and CT-based cardiac visualization... Read More →


Tuesday September 17, 2019 14:00 - 15:00
Summit 4/5

14:00

EDSL Infinity Wars: Mainstreaming Symbolic Computation
Scientists and Developers want the same thing: a simple code that does exactly what it should. For the former, it implies adhering to their knowledge base and domain idioms. For the latter, it means it compiles in a reasonable time frame and without bugs. for both, it better computes fast in the end. One way developers, especially in C++, provides scientists with usable libraries is to design them as Embedded Domain Specific Languages. Alas, in all honesty, if someone asked the Scientists, they will probably state that LaTex is *the* perfect DSLs they practice every day.

This is an old story and even if we only focus on matrix-based libraries, the current landscape of high-performance computing library -- Blaze, Blitz++, EIGEN, Armadillo, etc... -- is proof that those techniques have a decent public following. This is the point where the icky things start: stories of meta-programming, so-called expression templates and their uphill battle against new C++ features: interaction with auto, rvalue-references, move semantics and so on. The authors have spent quite a bit of their coding life trying to play with or around those techniques and this talk is about what they learned during this journey.

This talk will focus on what kind of mistakes, oversights and traps the old kind of scientific EDSLs fell into. We will investigate why the new C++ features didn't help them but pushed them further into a state of ever-growing complexity. We will present our vision of how a modern-C++ friendly EDSL for science can be built. By starting from scratch, this talk will cover the actual requirements of such a library including move-aware expression templates, symbolic formula building, type/value maps, named parameters and static visitors. As a conclusion, we will scheme over various immediate benefits of such an EDSL and new applications that old style libraries could not handle like symbolic simplification, automatic analytical derivation and more.

Speakers
avatar for Joel Falcou

Joel Falcou

assistant professor, LRI - Université paris 11
Joel Falcou is an assistant professor at the University Paris-Sud andresearcher at the Laboratoire de Recherche d'Informatique in Orsay, France. His researches focus on studying generative programming idioms and techniques to design tools for parallel software development. The two... Read More →
avatar for Vincent Reverdy

Vincent Reverdy

Researcher, University of Illinois at Urbana-Champaign
Vincent has been working as a post-doctoral researcher at the University of Illinois at Urbana-Champaign (USA) since he obtained his PhD at the Paris observatory (France) in november 2014. His main scientific interests are related to cosmology and general relativity. He his particularly... Read More →


Tuesday September 17, 2019 14:00 - 15:00
Crest 3

14:00

Behind Enemy Lines - Reverse Engineering C++ in Modern Ages
What do C++ programs really look like? When developers think about hierarchy and virtual calls they see it as design patterns and code but reverse engineers look at it from a different angle, they think about Assembly puzzles.

C++ is known as a tangled language, templates, lambdas and pointers. All of these features create a jungle of objects intended to make life easier for the programmer. But once the program is compiled, the target program is no longer what it once seemed.

Reversing C++ programs is tedious, demanding, and requires rebuilding inheritance, identifying templates and tainting program flow in order to combat the ties of function overloading and class utilization.

C++ Binaries are a world of mysteries. In my presentation I am going to show how C++ binaries looks like after compilation and how reverse engineers see C++ binaries and understand their logic.

Speakers
avatar for Gal Zaban

Gal Zaban

Gal Zaban is a Reverse Engineer with a particular interest in C++ code, currently working as a Vulnerability Researcher. As part of her journey in understanding the catacombs of C++, she developed various RE tools for C++ including Virtuailor. In her spare time when she's not dwelling... Read More →


Tuesday September 17, 2019 14:00 - 15:00
Crest 4/5

14:00

10 Techniques to Understand Existing Code
One of the reasons why a lot of us work in C++ is because there is a huge amount of existing projects written in C++.

But existing code can be hard to understand.

In this presentation, you will learn how to make sense of code quickly, from the general big picture of the codebase all the way down to the little details of the code of a complex class.

The ten rules covered in this session will teach you to:
- start reading code from the end
- identify the parts of code that carry the most information
- locate the code of any feature visible in the application
- and many more!

Code reading techniques usually come with years and years of experience. This presentation will teach some of them to you right now, supported by code examples.

There is a wealth of talks about how to write C++ code using the latest features of the language, but there are very few talks about reading existing code. In particular the everyday code that people have in their codebases. And as the saying goes, code is read much more often than it is written.

This presentation aims at filling this need in a practical way, by exposing 10 techniques that conferences attendees can use on an everyday basis to understand quickly the code they get to work on, as soon as they go back to the office after the conference.

Speakers
avatar for Jonathan Boccara

Jonathan Boccara

Principal Engineering Lead, Murex
Jonathan Boccara is a Principal Engineering Lead at Murex where he works on large codebases in C++.His primary focus is searching how to make code more expressive. He has dedicated his blog, Fluent C++, to writing expressive code in C++. He also gives internal trainings on C++ every... Read More →


Tuesday September 17, 2019 14:00 - 15:00
Aurora D

14:00

From Functions to Concepts: Maintainability and Refactoring Impact of Higher-Level Design Features
Higher levels of abstraction are useful for building things out of, but also have a higher cognitive and maintenance cost. That is, it's a lot easier to refactor a function than it is to change a type, and similarly easier to deal with a single concrete type than a class template, or a Concept, or a meta-Concept ... In this talk I'll present example strategies for refactoring the interface of functions, classes, and class templates. I'll also discuss how the recent addition of Concepts and the proposals for even-more-abstract features affect long-term refactoring in C++. If you're interested in refactoring and it isn't immediately clear that a Concept published in a library can never change, this talk is for you.

Speakers
avatar for Titus Winters

Titus Winters

C++ Codebase Cultivator, Google
Titus Winters has spent the past 6 years working on Google's core C++ libraries. He's particularly interested in issues of large scale software engineer and codebase maintenance: how do we keep a codebase of over 100M lines of code consistent and flexible for the next decade? Along... Read More →


Tuesday September 17, 2019 14:00 - 15:00
Aurora C

15:15

What's New in Visual Studio Code for C++ Development - Remote Development, IntelliSense, Build/Debug, vcpkg, and More!
If you’re looking for a fast and lightweight open-source code editor that runs on Linux, macOS, or Windows, Visual Studio Code has you covered. Come for a deep dive of new Visual Studio Code features which provide a rich, productive environment for C++ development across platforms. Features such as remote development with containers, the Windows Subsystem for Linux, and SSH, configuration improvements, build/debug features, IntelliSense enhancements, and using vcpkg to integrate 3rd party libraries will be presented live so you can see how they can aid in your day-to-day editing, building, and debugging. We will also share our open-source approach to developing the C/C++ extension.

Speakers
avatar for Tara Raj

Tara Raj

Program Manager, Microsoft
Tara is a Program Manager at Microsoft working on C++ for Visual Studio Code and vcpkg. Previously, she worked on the Windows Subsystem for Linux and V1 of new tools for SQL Server on Linux including Azure Data Studio. Her passion for developer tools and Linux has transferred over... Read More →


Tuesday September 17, 2019 15:15 - 15:45
Summit 4/5

15:15

Compiled C++ Coding Standards
Coding conventions, guidelines and standards are a perennial effort of software development. Lots of work goes into preparing and writing them but arguably less in following them - partly because these are documents usually maintained outside of main development, so they evolve separately and often retroactively.

We will show a novel model whereby the coding standard chosen by a team is a 'live' source code file integrated into a production repository so that it participates in compilation. This immediately brings a couple of advantages that we will explore in detail, as well as the implications it has in the context of a full team of developers.

As a practical example, the coding standard files of Splash Damage - a game development company - will be shown and discussed, detailing the various C++ aspects they deal with it and the techniques encouraged therein. Going further than the code, we'll talk about the human factor and how standards are written, evolved and championed across a large company in the face of different constraints between projects and teams.

Speakers
avatar for Valentin Galea

Valentin Galea

Technical Lead, Splash Damage
Valentin Galea is a professional video game developer based in London, UK. He assisted with or oversaw development of award-winning video game franchises like "Gears of War" and "Halo: The Master Chief Collection". C++ enthusiast and evangelist, focused on systems, graphics and engine... Read More →


Tuesday September 17, 2019 15:15 - 15:45
Summit 8/9

15:15

When C++ Zero-Cost Abstraction fails: how-to Fix Your Compiler
This talk will present how a so-called C++ zero-cost abstraction can prevent an optimizing modern compiler to vectorize a trivial loop.
It will be used as a pretext to present some of Clang and LLVM internals, so that the root cause of this missing optimisation can be found, fixed and/or reported back to the
compiler developers.

The overall goal is to give more insight to C++ developers about what's going on with their compilers!

Speakers
avatar for Adrien Guinet

Adrien Guinet

Quarkslab


Tuesday September 17, 2019 15:15 - 15:45
Crest 4/5

15:15

TMI on UDLs: Mechanics, Uses, and Abuses of User-Defined Literals
We’ve been designing user-defined types in C++ forever, but we were stuck with the same old predefined literal types that somehow had to suit our new concepts. We’d use constructors to beat them into compliance with our new concepts, but we were still just pretending that a double floating-point value had something to do with a kilogram.

C++11 introduced user-defined literals, and C++14, C++17, and C++20 have extended their convenience. In this brisk talk, we’ll look at the mechanics of all six varieties of user-defined literals and use them in a straightforward way to enhance usability and correctness of our user-defined types, and banish type sinks from our interfaces. Along the way, we'll see what the standard lets us get away with and what it doesn't.

Then we’ll see how to force people to write their integers in base 5, require that literals adhere to a particular syntax, deal with those pesky 256-bit integers, and circumvent problems with octals. Time permitting, we’ll see some unusual and possibly useful things we can do with user-defined literals.

Speakers
avatar for Stephen Dewhurst

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-author... Read More →


Tuesday September 17, 2019 15:15 - 15:45
Crest 3

15:15

Back to Basics: Atomics, Locks, and Tasks (part 2 of 2)
The history of concurrent programming in C++ is short. It began in 2011. At first peek, C++11, and later C++-standards support only the abstractions for library developers but not for application developers.
But the second view gives more details. Using the right techniques and the right abstraction make it possible to use the concurrent features safely.

This class shows you the safe way:

- How you can use atomics for simple jobs.
- How locks help to master shared state without the inherent danger of mutexes.
- How tasks are a significant improvement to threads and are part of the future and not of the past. Tasks allow you to
* share state without the need of synchronisation.
* manage values, notifications, and exceptions in a concurrent environment.
* create producer/consumer workflows without the highly error-prone condition variables.
- How to use concurrency in a declarative style with the parallel STL.

Speakers
avatar for Rainer Grimm

Rainer Grimm

Trainer, Modernes c++


Tuesday September 17, 2019 15:15 - 16:15
Aurora A

15:15

Efficient GPU Programming with Modern C++
Computer system architecture trends are constantly evolving to provide higher performance and computing power, to support the increasing demand for high-performance computing domains including AI, machine learning, image processing and automotive driving aids. The most recent being the move towards heterogeneity, where a system has one or more co-processors, often a GPU, working with it in parallel. These kinds of systems are everywhere, from desktop machines and high-performance computing supercomputers to mobile and embedded devices.

Many-core GPU has shaped by the fast-growing video game industry that expects a tremendous massive number of floating-point calculations per video frame. The motive was to look for ways to maximize the chip area and power budget dedicated to floating-point calculations. The solution is to optimize for execution throughput of a massive number of threads. The design saves chip area and power by allowing pipelined memory channels and arithmetic operations to have long latency. The reduce area and power on memory and arithmetic allows designers to have more cores on a chip to increase the execution throughput.

In CPPCON 2018, we presented "A Modern C++ Programming Model for CPUs using Khronos SYCL", which provided an introduction to GPU programming using SYCL.

This talk will take this further. It will present the GPU architecture and the GPU programming model; covering the execution and memory model. It will describe parallel programming patterns and common parallel algorithms and how they map to the GPU programming model. Finally, through this lens, it will look at how to construct the control-flow of your programs and how to structure and move your data to achieve efficient utilisation of GPU architectures.

This talk will use SYCL as a programming model for demonstrating the concepts being presented, however, the concepts can be applied to any other heterogeneous programming model such as OpenCL or CUDA. SYCL allows users to write standard C++ code which is then executed on a range of heterogeneous architectures including CPUs, GPUs, DSPs, FPGAs and other accelerators. On top of this SYCL also provides a high-level abstraction which allows users to describe their computations as a task graph with data dependencies, while the SYCL runtime performs data dependency analysis and scheduling. SYCL also supports a host device which will execute on the host CPU with the same execution and memory model guarantees as OpenCL for debugging purposes, and a fallback mechanism which allows an application to recover from failure.

Speakers
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about
avatar for Gordon Brown

Gordon Brown

Principal Software Engineer, SYCL & C++, Codeplay Software
Gordon Brown is a principal software engineer at Codeplay Software specializing in heterogeneous programming models for C++. He has been involved in the standardization of the Khronos standard SYCL and the development of Codeplay's implementation of the standard from its inception... Read More →


Tuesday September 17, 2019 15:15 - 16:15
Aurora D

15:15

Converting to C++20 Modules
C++20 will have a module system, which provides benefits beyond simple code hygiene. C++20 modules uses new keywords and explicit source-level annotations. How do we get there from here?

I have been implementing this in the GNU compiler, and will talk about the broad strokes of the module specification.
I will describe how:
* one may incrementally convert source code,
* build systems might be augmented,

Speakers
avatar for Nathan Sidwell

Nathan Sidwell

Software Engineer, Facebook
Nathan is a developer of the GNU Compiler Collection, particularly the C++ Front End. His current major project is implementing and influencing the modules TS.


Tuesday September 17, 2019 15:15 - 16:15
Aurora C
  • Level Beginner, Intermediate, Advanced, Expert
  • Tags modules

15:50

(Ab)using Compiler Tools
Many of you are already using a number of tools to aid your C++ development process: from static analyzers like clang-tidy in your IDEs, through dynamic analysis with sanitizers, to debugging with gdb and performance analysis with perf, tools like these help make your programs better, safer and faster.

In this talk I will introduce you to some of their lesser known friends that are somewhat connected to compilers and might prove useful for your daily work. Also, in the end, we’ll have some fun!

Speakers
RK

Reka Kovacs

PhD Student, Eotvos Lorand University


Tuesday September 17, 2019 15:50 - 16:20
Summit 4/5

15:50

C++ Standard Library "Little Things"
Major feature advancements like Concepts come with a lot of hype, but the committee has added many smaller and less invasive enhancements in recent standards. These can improve clarity and performance with targeted changes to opt-in without sprawling changes to one's codebase. We'll talk about how you can use these features, what they do under the covers.

A special emphasis will be placed on the associative containers' data structures, as those containers have received a large number of enhancements and most folks don't have a simple mental model of how they work.

Speakers
avatar for Billy O'Neal

Billy O'Neal

Senior SDE, Microsoft
Billy a maintainer of the standard C++ libraries at Microsoft. He improves performance in the library for existing features, and is the author of several C++17 library features in Visual C++, including string_view, boyer_moore searchers, parallel algorithms, and parts of filesyst... Read More →


Tuesday September 17, 2019 15:50 - 16:20
Crest 4/5

15:50

Small is beautiful: Techniques to minimise memory footprint
When we code, we often assume that the computer has an infinite amount of
memory. This is, of course, /very/ false. It is false for embedded
programming, where memory is often limited to a few megabytes or even a few
kilobytes, but it is also false for the most powerful workstations and
servers. Using memory wisely makes your application possible on small
systems as well as prevents, or at least reduces, scaling problems for
larger applications. While some programming languages are designed to hide
implementation details from the programmer, C++ allows the programmer to
specify, with a good level of control, how memory is allocated, structured,
and used. In this talk, we will explore what can be done at run-time with
negligible cost, what can be done at compile-time with meta-programming,
and how we can thwart default compiler behavior to achieve memory-efficient
type-safe data representations. We will also extend the discussion to the
higher-level reorganization of data structures in order to make a better
use of memory.

Speakers
avatar for Steven Pigeon

Steven Pigeon

Associate Professor, Université du Québec à Rimouski
STEVEN PIGEON (steven.pigeon@uqar.ca) is an associate professor of mathematics and computer science in the Department of Mathematics, computer science, and engineering at the Université du Québec à Rimouski. He received his PhD. from the Université de Montréal for his thesis... Read More →


Tuesday September 17, 2019 15:50 - 16:20
Summit 8/9

15:50

Upgrade from "permissive C++" to "modern C++" with Visual Studio 2019
Just how different is "Modern C++" from "legacy C++"? Is my codebase ready for C++17? Do I need a full rewrite of my app to have modern C++ code? If you're looking for answers to some of these questions, join us for a session on how to effectively add modern C++ features in your existing C++ projects by taking advantage of the latest developer tools for C++ from Microsoft; and no, you don't need to rewrite you app…

Speakers
avatar for Nick Uhlenhuth

Nick Uhlenhuth

Program Manager, Microsoft


Tuesday September 17, 2019 15:50 - 16:20
Crest 3

16:45

Back to Basics: Object-Oriented Programming
Modern C++ is at its best when using generic and/or functional programming filled with techniques to squeeze the greatest possible performance with the latest compile-time features.

But millions of C++ programmers are still using C++ the old-fashioned way, designing, building, and most importantly, maintaining object-oriented hierarchies based on virtual functions and run-time polymorphism. Some of these programmers don’t know a different way and some would love to start from scratch with a more modern approach, but they all share something in common. They all want to build the best code they can with the paradigm they are are using.

Object-Oriented Programming was state-of-the-art C++ programming for decades and industry best practices developed to produce high-quality code and avoid practices that lead to buggy, hard-to-maintain code. With billions of lines of OOP code in C++ currently in production, someone should be talking about OOP best practices, because old-school doesn’t mean easy. But OOP just isn’t trendy anymore.

In this session, instead of lecturing you that you shouldn’t be using OOP, I’m going to share the industry best practices developed during the last four decades and updated to latest language features.

Speakers
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →


Tuesday September 17, 2019 16:45 - 17:45
Crest 4/5

16:45

Clang-based Refactoring, or How to Refactor Millions of Line of Code Without Alienating your Colleagues
At first look, Clang-Tidy looks like a convenient static analysis tool. But it is actually the emerged part of an incredible iceberg that can change the way software developers work on big projects.
Using the extension API provided by clang tooling, you can design custom tools that will allow you to get rid of bad patterns or API mistakes in your code that were historically considered "too deep-rooted to fix". Through concrete examples we will see what these custom tools can do and how this could impact your everyday job as software maintainers.
But wielding such powerful tools can be hard! And working on big projects also means you are likely working in an ecosystem with a lot of other developers. What happens when each time these colleagues try to sync their repository they find out one of your refactorings completely changed the API they were calling in their local work? We will see the difficulties and pitfalls one can encounter when developing and using clang based refactoring tools and how to avoid or reduce them.

Speakers
avatar for Fred Tingaud

Fred Tingaud

Principal software engineer, Murex


Tuesday September 17, 2019 16:45 - 17:45
Summit 4/5

16:45

Concurrency in C++20 and Beyond
C++20 is set to add new facilities to make writing concurrent code easier. Some of them come from the previously published Concurrency TS, and others are new, but they all make our lives as developers easier. This talk will introduce the new features, and explain how and why we should use them.

The evolution of the C++ Concurrency support doesn't stop there though: the committee has a continuous stream of new proposals. This talk will also introduce some of the most important of these, including the new Executor model.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Tuesday September 17, 2019 16:45 - 17:45
Aurora D

16:45

How to Choose the Right Standard Library Container, and Why You Should Want Some More
Containers are at the heart of the Standard Library and are used in almost all non-trivial C++ programs, but a misunderstanding of the relationship between their algorithmic complexity and actual behavior can dramatically affect program performance. One of the most compelling advantages of C++ is that it allows programs to be precisely crafted so as to take full advantage of the hardware while still providing sophisticated high-level abstractions that represent the domain in elegant, expressive and natural ways. Knowing how to choose the correct container for each task and how to use that container most effectively is a vital part of that craft, and can have a profound impact on the behavior of a program.

From a user’s perspective many popular computer programs are no faster today than they were 30 years ago despite the enormous increase in measured performance of the hardware. I believe that this is due in part to a misconception that efficiency does not matter in most situations because processors are so fast and numerous, and memory is so large. This talk will proceed with the assumption that performance almost always matters, and so attention to efficiency is an essential aspect of good programming. We will examine the Standard Library containers and consider both the abstractions they are meant to express and the practical limitations they impose. We will then explore some containers that are not yet in the Standard Library which promise efficiency improvements in various situations. Finally we will look at a number of common cases and compare the naïve implementation with one that considers the actual behavior of containers on modern processors.

Speakers
avatar for Alan Talbot

Alan Talbot

Manager - Software Engineering, LTK Engineering Services
Alan Talbot started programming in 1972, in BASIC on a DEC PDP-8. He began his professional programming career in 1979 and started using C++ in 1989. For 20 years he was a pioneer in music typography software, then spent 8 years writing digital mapping software, and has spent the... Read More →


Tuesday September 17, 2019 16:45 - 17:45
Crest 3

16:45

C++ Code Smells
There are a lot of rules to remember for writing good C++. Which features to use? Which to avoid? The C++ Core Guidelines would be over 500 pages long if you were to try to print it! What happens if we swap this around and instead of Best Practices look at Code Smells. Coding decisions that should make you think twice and reconsider what you are doing.

We will ask:

* What are the most important code smells?
* Does it simplify the way we write code?

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http://cppbestpractices.com.I'm... Read More →


Tuesday September 17, 2019 16:45 - 17:45
Aurora C

16:45

C++ Design Patterns: From C++03 to C++17
Design patterns are commonly recognized, or “standard”, solutions to frequently occurring software problems. The patterns are the recommended starting point for solving these problems. More than that, the patterns are also useful as a concise high-level vocabulary that we, as software engineers, use to communicate with each other.

Design patterns are not static: they appear when a problem is recognized as sufficiently common, they evolve together with the tools we have available to build solutions, and sometimes they die when the solutions that were universally accepted become obsolete and are superseded by new and better techniques. One of the drivers of the pattern evolution is the development of the programming languages.

As software design challenges, the patterns are usually not very language-specific, except when they are. C++ makes some software problems easy to solve (to the extent that anything is easy in our favorite complex language). More often, C++ provides unique ways to solve programming problems, which give rise to language-specific design patterns. On the other hand, C++ has its own little idiosyncrasies that we have to work around, and so we have an assortment of design patterns that complement the language (remember that the patterns are a high-level language themselves, and so we can use them to express ideas that the programming language does not convey very well).

In this class, we will follow the evolution of several design patterns and see how they were affected by language evolution, from C++98 to C++17. Some patterns, like policy-based design and scopeguard, have benefited from new language features and are approaching the state of “this is what we always wanted but could not have.” Other patterns, like typelists, have either evolved beyond recognition or became essentially obsolete. Many patterns are mostly unchanged, with few cosmetic tweaks. The takeaway from this class might be learning a new design pattern that is a perfect solution for a problem you’ve been working on, discovering a better way to do something you needed done, or a coding trick that is “just what you were looking for.” If nothing else, you will get a better understanding and appreciation for the interplay between the language capabilities and the choices we make in software design.

Speakers
avatar for Fedor Pikus

Fedor Pikus

Chief Scientist, Mentor Graphics
Fedor G Pikus is a Chief Engineering Scientist in the Design to Silicon division of Mentor Graphics Corp (Siemens business). His earlier positions included a Senior Software Engineer at Google and a Chief Software Architect for Calibre PERC, LVS, DFM at Mentor Graphics. He joined... Read More →


Tuesday September 17, 2019 16:45 - 17:45
Summit 8/9

16:45

There Are No Zero-cost Abstractions
C++ is often described as providing zero-cost abstractions. Libraries offer up facilities documented as such. And of course, users read all of these advertisements and believe that the abstractions they are using are truly zero-cost.

Sadly, there is no truth in advertising here, and there are no zero-cost abstractions.

This talk will dive into what we mean by "zero-cost abstractions", and explain why it is at best misleading and at worst completely wrong to describe libraries this way. It will show case studies of where this has led to significant problems in practice as libraries are designed or used in unscalable and unsustainable ways. Finally, it will suggest a different framing and approach for discussing abstraction costs in modern C++ software.

Speakers

Tuesday September 17, 2019 16:45 - 17:45
Aurora A

16:45

Unicode: Going Down the Rabbit Hole
Have you ever looked at a Unicode emoji of a happy family and wondered how that actually works? Have you been to websites where was a common sight? Is your name in a computer system not O'Neill but O’Neill ? Ever wondered why some texts crashed iOS and Android? Are you involved in a computer system that deals with text that may be more complicated than ASCII - such as receiving résumés - and would you like to understand how this all works beneath the surface?

In this talk I'll be taking you through a deep dive in history, starting with the Sumerians, Egyptians and working quickly to recent history, including Irish Ogham and Devanagari through to the most recent combining emoji with Fitzpatrick modifiers and variation selectors. We'll then take a look through Unicode itself, finding out along the way how and why things are as complicated as they are. Finally, we'll take a deep dive into past, current and future C++ support, slowly iterating our way out of C and arriving at the SG16 plans for C++23.

Speakers
avatar for Peter Bindels

Peter Bindels

Software Engineer, TomTom


Tuesday September 17, 2019 16:45 - 17:45
Summit 6/7

18:00

Boost Community Dinner
The Boost Community invites anyone interest to join. Pre-registration not necessary.

Tuesday September 17, 2019 18:00 - 20:15
Ski Village (Lower Level)

18:00

Audio Developers Meetup
This is a meetup for audio developers and anyone else interested in manipulating sound using software or hardware.

Moderators
avatar for Tom Poole

Tom Poole

Lead Software Developer, JUCE

Tuesday September 17, 2019 18:00 - 21:00
Mountain Pass

20:30

Lightning Talks
Come for bite size talks you'll want more of!

Moderators
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.

Tuesday September 17, 2019 20:30 - 22:00
Aurora A

20:30

Tool Time
Similar to tech labs at some other events, we’re offering the opportunity for anyone, from a vendor to a super-user, to represent a tool (app, library, framework, or service) and run their own table answering questions or showing demos.

Participation is free and we are currently accepting applications for tables.

See the Tool Time page for more details and to make your submission.

Speakers
avatar for Peter Bindels

Peter Bindels

Software Engineer, TomTom


Tuesday September 17, 2019 20:30 - 22:00
Social Hall (Aurora B)
 
Wednesday, September 18
 

08:00

Site Reliability Engineering: Balancing Risk and Velocity
As a venerable, powerful language, C++ is used in a variety of mission critical, performance-sensitive, complex applications and services. Whether in embedded systems, video games, network programming, or a host of other areas, there is always an inherent tug-of-war between the velocity of feature development and the risks to reliability of a production service or application. Over the years, many strategies to address this conflict have arisen, from complex change management processes to new models of work (e.g. the “DevOps” movement).

Site Reliability Engineering seeks to implement some of the principles of the “DevOps” mindset with concrete practices and cultural norms. Born out of decades of running massively scaled systems at companies like Google, SRE implements some hard-won lessons in the trenches of billion-plus user applications. This talk will introduce attendees to some of the basic concepts of SRE, and frame how it influences the development process for a service. We’ll talk about service level objectives, error budgets, and risk analysis, and how teams can use these tools to better communicate and drive innovation, while maintaining a minimum acceptable level of reliability for their users.

SRE concepts are not solely useful to C++ developers, but also to other devs, operations teams, product organizations, and anyone influencing the production course of an application or service. After attending this talk, conference goers will have a basic grasp of SRE fundamentals, and be ready to take additional steps like reading SRE books, taking SRE training, or even establishing aspirational service level objectives in their own organizations.

Speakers
avatar for Derek Remund

Derek Remund

Strategic Cloud Engineer, Google



Wednesday September 18, 2019 08:00 - 08:45
Summit 8/9

08:30

ISO SG14 Working Meeting
ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about

Wednesday September 18, 2019 08:30 - 10:00
Community Room

09:00

TCMalloc: A High-Performance Memory Allocator
In this talk, I plan to discuss TCMalloc, a high-performance memory allocator for C++ that we use in Google. Specifically, I’ll be covering points:

- Why the choice of memory allocator impacts application performance
- How we’ve optimized our implementation to reduce the “data center tax”
- Where we leverage C++ language features for better memory allocation
- What telemetry we can obtain from TCMalloc in production, and how we leverage it

Speakers
CK

Chris Kennelly

Software Engineer, Google
Chris Kennelly is a Software Engineer at Google. He works on developing performance optimizations for Google's core libraries Prior to Google, he worked on low-latency networks and computational molecular dynamics.


Wednesday September 18, 2019 09:00 - 09:30
Crest 4/5

09:00

How to Herd 1,000 Libraries
In the current C++ world, it is a struggle to convince even a single external library to build and behave. Adding a third and fourth dependency causes quadratic grief as each library interacts with each other and One Definition Rule violations lurk around every corner.

How, then, is it possible to manage over 1,000?

In this talk, we'll talk about the techniques, shims, and hacks used in the Vcpkg package manager to persuade, connive, and coerce all these independent moving parts into a single robust ecosystem. We'll sample the myriad approaches used by real-world libraries to declare dependence and walk through how they can be guided to do the right thing at the end of the day.

Private package management systems still thrive in corporations and these approaches can provide method to the madness of consuming open source.

Speakers
RS

Robert Schumacher

Software Developer, Microsoft


Wednesday September 18, 2019 09:00 - 09:30
Crest 3

09:00

A Series of Unfortunate Bugs
Any C++ developer working in a large codebase is very likely to experience weird bugs. In this talk, I'll be sharing with you post-mortem of a set of weird bugs that occurred in deceptively simple code but were difficult to debug.
Many of these bugs occurred at unfortunate moments - for instance, just before the day of the release or at the customer site. Almost all of them took nontrivial amount of time to debug them. But surprisingly it took only a few lines of code to fix them. The cause of these bugs range from static buffer overflow and stack corruption to undefined behaviours and many other exciting ways to break a C++ program. In this talk I’ll present the code snippets in which the bugs occurred, show you the fixes and share with you the pitfalls to avoid these bugs.

Speakers
avatar for Satabdi Das

Satabdi Das

Senior Software Engineer, Mentor, A Siemens Business
Satabdi has been programming in C++ for more than 10 years. She works on a market leading emulator platform widely used by the chip design companies. She has previously worked on parsers and static analyzers. She is a big proponent of using modern C++ and likes to organize lunch and... Read More →


Wednesday September 18, 2019 09:00 - 09:30
Summit 4/5

09:00

Back to Basics: Test-driven Development
In this class, attendees will learn about test-driven development as it applies to C++ programming. Test-driven development (TDD) is the weird idea that you should write tests for code that as yet does not exist! The idea grows on you, though, sometimes to the point that you can’t imagine writing programs any other way.

Now, if you aren’t practicing TDD already, one class may not make you into a fresh convert; for attendees in that category, my goal is to convince you that it’s not completely stupid and that “there is something there.”

In C++, TDD offers significant advantages but also poses some language-specific challenges you should be aware of. The difficulties are severe enough that TDD in C++ is often limited to small isolated components or low-level libraries. It gets harder when we want to build a large system, but it’s not impossible.

We will learn about specific programming techniques such as dependency injection. Perhaps more importantly, we will see how the decision to use TDD influences the design process and the resulting software architecture. Some of the problems we will encounter when trying to follow TDD practices in C++ have at most tolerable solutions if we limit ourselves to language tricks. We can make our software-testing life much easier if we build testability into the software from the design stage, which, in turn, makes the software itself better.​

Speakers
avatar for Fedor Pikus

Fedor Pikus

Chief Scientist, Mentor Graphics
Fedor G Pikus is a Chief Engineering Scientist in the Design to Silicon division of Mentor Graphics Corp (Siemens business). His earlier positions included a Senior Software Engineer at Google and a Chief Software Architect for Calibre PERC, LVS, DFM at Mentor Graphics. He joined... Read More →


Wednesday September 18, 2019 09:00 - 10:00
Aurora C

09:00

"Mostly Invalid": flat_map, Exception Guarantees, and the STL
The proposed new STL containers "flat_set" and "flat_map" work like "priority_queue" in that they adapt some existing container, such as std::vector or std::deque, by combining it with other user-provided components, such as a comparator. Such composed types generally impose vague semantic requirements on their components; for example, a composed type might implicitly require that copy-construction and assignment do "the natural thing." These semantic requirements are hardly ever stated explicitly in the Standard; instead, they fall out of common vendor implementations.

In committee discussion of "flat_map", it was noticed that container adaptors such as "priority_queue" also implicitly require some sort of exception guarantee. Not only does the library require that successful copy-assignment actually do assignment, but also, the library generally requires that unsuccessful copy-assignment should do nothing at all — a property referred to as the "strong exception guarantee."

Arthur will show some examples where a user-provided comparator that throws can break the class invariants of "priority_queue". Once the class invariants of a container have been broken, we say that the container is in a "mostly invalid" state — a different and even more dangerous state than the "valid but unspecified" state of a moved-from object. We'll walk through several strategies for inserting values into a flat_map and show how each one breaks down when confronted with a throwing move-constructor, a throwing comparison, or both. Finally, Arthur will suggest a path forward for formalizing the currently underspecified behavior of STL types that rely on user-provided components.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Arthur O'Dwyer is the author of "Colossal Cave: The Board Game," "Mastering the C++17 STL" (the book), and "The STL From Scratch" (the training course). He runs professional C++ training courses, is occasionally active on the C++ Standards Committee, and has a blog mostly about C... Read More →


Wednesday September 18, 2019 09:00 - 10:00
Summit 8/9

09:00

C++20: What's in it for you?
With the current three-year pace of C++ releases, the next release is scheduled for 2020, C++20. This presentation gives an overview of what you can expect in the new standard. It starts with discussing the C++20 language features that will be added by the C++20 standard, such as concepts, coroutines, templated lambdas, the spaceship operator, pack expansion in lambda captures, string literals as template parameters, extra initializer for range-based for loop, modules, and more. Next, we'll delve into the new Standard Library features, such as ranges, std::span, atomic smart pointers, and more. Depending on the outcome of the next C++ Standard Committee meeting, the list of new features might include improved futures, task blocks, and text formatting. If you want a concise overview of what the C++20 standard will offer, then this presentation is for you.

Speakers
avatar for Marc Gregoire

Marc Gregoire

Software Architect, Nikon Metrology
Marc Gregoire is a software architect from Belgium. He worked 6 years as a consultant for Siemens and Nokia Siemens Networks on critical 2G and 3G software running on Solaris for telecom operators. This required working with international teams stretching from South America and the... Read More →


Wednesday September 18, 2019 09:00 - 10:00
Aurora A

09:00

A State of Compile Time Regular Expressions
In this talk I will present an advancement on the Compile Time Regular Expression (CTRE) library. The library was designed with new C++20 features, and it uses novel techniques. This presentation independently sums up the work since my previous CppCon talk about the library.

The primary topic of this talk will be an explanation of the new Deterministic Finite Automaton (DFA) engine in the library and how it's built and optimised during compilation. I will explain the differences and limitations of the new engine in comparison to the previous Back Tracking engine. I will address these differences with a benchmark and I will discuss the generated assembly.

Even if you are not interested in regular expressions, you will learn new techniques in compile-time meta-programming and see new C++20 features in action.

Speakers
avatar for Hana Dusíková

Hana Dusíková

Senior Researcher, AVAST
Hana is working as a senior researcher in Avast Software. Her responsibility is exploring new ideas and optimizing existing ones. She also propagates modern C++ techniques and libraries in internal techtalks and gives talks at local C++ meetups.She studied computer science at Mendel... Read More →


Wednesday September 18, 2019 09:00 - 10:00
Aurora D

09:35

Expression Templates for Efficient, Generic Finance Code
Our legacy code for pricing financial options suffered from being written in a style that made the logic of the code difficult to follow and created performance bottlenecks. This presentation will show how a small expression template library can allow mathematical code to be updated so that even complex expressions are clear to the reader and allows code to operate on both scalars and vectors enabling substantial performance optimisations. Additionally, it will show that these updates can be done without substantially disturbing the existing code or duplicating it which simplifies testing and decreases the chances that bugs and inconsistencies are introduced. The presentation will also look at how features of C++17/C++20 make expression templates easier to implement than ever before and some implementation details so as to give the audience a starting point should they wish to utilise expression templates in their own code.

Speakers
avatar for Bowie Owens

Bowie Owens

Senior Research Technician, Data61
Bowie Owens is a software developer working at Data61, a part of the Australian government funded research organisation CSIRO. The team he works in develops complex mathematical models for pricing financial options. The software developed at Data61 is integrated into a larger trading... Read More →


Wednesday September 18, 2019 09:35 - 10:05
Crest 3

09:35

Minimal Structured Logging for Autonomous Vehicles
In order to quickly diagnose issues with autonomous vehicles, it is important to produce human readable debug logs for developers, vehicle operators, and triage engineers. The logged format should also allow for easy data aggregation across a large fleet of vehicles. Traditionally, debug logging frameworks that are based on iostream s cannot meet the performance and usability demands of this domain. This talk will describe a fast and efficient structured debug logging framework. This framework can also be incorporated into error handling code, and is easily toolable for offline statistics gathering.

We'll begin with a quick look at debug logging requirements for autonomous vehicles and a review of current debug logging frameworks. Next, we'll discuss the implementation of the Explanation<> class, which is the centerpiece of the debug logging framework and is the actual data type being logged. The data type uses static and constexpr data to efficiently represent a formatted string. It also allows significant performance improvements to be made to the the debug logging framework. The framework enables novel usability improvements, like the ability to efficiently pass around log statements encoded in the Explanation<> type.

Next, we'll compare the performance of this approach to the original logging framework based on iostreams for runtime performance, log size, and toolability. Finally, we will illustrate how the implementation of this library will greatly simplified by C++20.

Speakers
RK

Robert Keelan

Onboard Code Health Lead, Argo AI
Rob Keelan began his programming career as a Mechanical Engineering PhD student coding biological heat transfer simulations for heterogeneous systems. Rob leads the C++ Code Health team at Argo AI. The team is responsible for maintaining Argo’s standard library, and writing custom... Read More →


Wednesday September 18, 2019 09:35 - 10:05
Summit 4/5

09:35

How to Hold a T
Building a container type offers many unique challenges, complicated by the plethora of approaches available in C++. This talk will focus specifically on storing and holding Ts, generically. We'll cover "Storage Duration", "Object Lifetime", the way those two concepts interact, and how to decouple them not just in a practical sense, but literally in the type system so that you too can learn "How to Hold a T"!

Speakers
avatar for CJ Johnson

CJ Johnson

Software Engineer, Google


Wednesday September 18, 2019 09:35 - 10:05
Crest 4/5

10:30

Applied WebAssembly: Compiling and Running C++ in Your Web Browser
WebAssembly is a new technology in all modern browsers designed to let you run high-performance code. Maybe you've heard of WebAssembly before, read an article or two, or even tried to use it with your software project. Since WebAssembly is a low-level language, it's easy to get bogged down in the technical details, and leave without knowing whether WebAssembly will be useful for you. In this talk, I'll take a top-down approach, showing a real problem and how WebAssembly can help.

From August to December this year, I'll be teaching C++ to students at Morehouse College. Having a tool like Compiler Explorer is invaluable as a teaching aid, since it allows the students to immediately see C++ compilation results, on any device that has a web browser. But Compiler Explorer and tools like it require a server to do compilation, so they're hard to use offline. With WebAssembly, we can run the compiler client-side, in the browser, no server required.

First, I'll show how I ported the clang compiler and linker to WebAssembly. Since Clang 8 supports WebAssembly as a compilation target, we can even run the resulting executable sandboxed in the browser. Next, we'll dive into how Clang compiles C++ constructs into WebAssembly. Finally, we'll look at some of the new WebAssembly features in development.

Speakers
avatar for Ben Smith

Ben Smith

Software Engineer, Google
Ben Smith is a Software Engineer at Google, on the WebAssembly team. His primary work involves adding new features to V8, Chrome's JavaScript and WebAssembly engine. He's also the chair of the WebAssembly Community and Working Groups, where he helps move new features forward. From... Read More →


Wednesday September 18, 2019 10:30 - 12:00
Aurora A

12:05

Book Signing: Nicolai Josuttis
Nicolai will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries.He is well known in the programming community because he not only speaks and... Read More →


Wednesday September 18, 2019 12:05 - 12:25
Bookstore

12:30

Starting and Running C++ User Groups
C++ User Groups have been a great success story for the last 8 years, with this talk I'd like to share my experience in founding and running a successful C++ User Group. I've started in December 2011 my own C++ User Group in Düsseldorf, and with Meeting C++ I have been supporting many new C++ User Groups in the last years, exchanged many thoughts and experimented with different formats for local groups. Let's have an overview on how you could get started today, and what one can do to keep a group running for several years.

The Talk begin on how to start a local group and give an overview on many different ways on what to do and how to keep a group running. Many of these ideas are also very good fits for your team, so if you don't have the time to become active in your local User Group, this talk can still give you many ideas for what to do in your own team meetings.

Speakers
avatar for Jens Weller

Jens Weller

CEO, Meetingcpp GmbH
Jens Weller has worked, since 2007, as a freelancer in C++, specialising in consulting, training and programming C++. He started with programming C++ back in 1998. He is an active member of the European C++ community and the founder of the Meeting C++ platform and conference. Jens... Read More →


Wednesday September 18, 2019 12:30 - 13:30
Summit 8/9

13:00

ISO SG14 Working Meeting
ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about

Wednesday September 18, 2019 13:00 - 15:00
Community Room

13:35

Book Signing: Andrei Alexandrescu
Andrei will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Andrei Alexandrescu

Andrei Alexandrescu

Vice President and Treasurer, The D Language Foundation
Andrei Alexandrescu is a researcher, software engineer, and author. He wrote three best-selling books on programming (Modern C++ Design, C++ Coding Standards, and The D Programming Language) and numerous articles and papers on wide-ranging topics from programming to language design... Read More →


Wednesday September 18, 2019 13:35 - 13:55
Bookstore

13:35

Book Signing: Jonathan Boccara
Jonathan will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Jonathan Boccara

Jonathan Boccara

Principal Engineering Lead, Murex
Jonathan Boccara is a Principal Engineering Lead at Murex where he works on large codebases in C++.His primary focus is searching how to make code more expressive. He has dedicated his blog, Fluent C++, to writing expressive code in C++. He also gives internal trainings on C++ every... Read More →


Wednesday September 18, 2019 13:35 - 13:55
Bookstore

14:00

Speaker Portraits
Jonathan Phillips will be taking portrait photos of speakers.

Wednesday September 18, 2019 14:00 - 15:00
Conference Room A

14:00

C++ Sanitizers and Fuzzing for the Windows Platform Using New Compilers, Visual Studio, and Azure
We have extended Google’s Address Sanitizer to add it to the C++ compilers for Windows, enhanced the open source runtimes to make Address Sanitizer work for a wide variety of Windows applications, and topped it off with Azure-powered fuzzing controlled directly in the Visual Studio IDE. You will see how we have deployed this technology on major products from Microsoft, including Office, Windows, and the compiler itself. You can use this to find critical memory safety bugs at scale in your code.

We’ve added the Google Sanitizer technology to the C++ compilers for Windows and enhanced the open source runtimes. The power of this technology for both security and correctness is compelling . The Microsoft platform has years of legacy and non-standard C++ code that will not compile with CLANG/LLVM. These large code bases ship from within Microsoft and at a large number of top ISV’s. We first talk about the value of compiling with this new technology as measured within Microsoft. We then briefly open up the compiler’s code generation and the Google runtime to provide an overview of how the technology works.

Key to making this technology pervasive is support in Visual Studio 2019. We demonstrate two failures in the IDE: One difficult bug that’s present in an application, and another one bug that we found inside the Microsoft compiler itself. These are correctness bugs not security vulnerabilities. For the security value proposition we demonstrate a POC in a Windows DLL. We also cover the effects this C++ technology is having on the internal development process. We discuss compiling all of Office and then compiling code at an ISV we have worked with pre-release.

Fuzzing is a process that’s key to using this technology beyond unit testing. Fuzzing in the cloud is attractive because we’ve made the experience fire-and-forget directly from Visual Studio. We conclude the talk with a demonstration that shows a new integration of Visual Studio with a fuzzing service in Azure.

Speakers
avatar for Jim Radigan

Jim Radigan

VC++ Architect, Microsoft


Wednesday September 18, 2019 14:00 - 15:00
Summit 8/9

14:00

Lifetime analysis for everyone
Object lifetimes are a common source of bugs in C++ that can cause crashes or other unexpected behavior. Fortunately, we now have tools to help us find issues before they can manifest. Guided by Herb Sutter's paper on lifetime analysis, the Clang community has implemented new lifetime warnings which work on single statements. These warnings are only a subset of what is described in the paper, but they have no false positives and still catch important problems in your code. During this talk we will introduce you to the basic principles of the new warnings, share their results on open source projects, and show you tips and tricks on how to get the most out of these diagnostics both for library and application code authors. Spoiler alert: these warnings found bugs in very popular projects!

Speakers
avatar for Gábor Horváth

Gábor Horváth

PhD Student, Eötvös Loránd University
Gabor started a Ph.D. in 2016. He is a contributor to research projects related to static analysis since 2012. He is a clang contributor, participated in Google Summer of Code twice as a student and twice as a mentor, interned for Apple and Microsoft. He teaches C++ and compiler construction... Read More →
avatar for Matthias Gehre

Matthias Gehre

Senior Software Architect, Silexica GmbH
Matthias co-maintains the Clang-based implementation of Herb Sutter’s lifetime checks, available online at https://github.com/mgehre/llvm-project and godbolt.org. He is currently working as a Senior Software Architect at Silexica. With its headquarters in Germany and offices in... Read More →


Wednesday September 18, 2019 14:00 - 15:00
Aurora D

14:00

A Unifying Abstraction for Async in C++
Async in C++ is in a sad state. The standard tools -- promises, futures, threads, locks, and std::async -- are either inefficient, broken, or both. Even worse, there is no standard way to say _where_ work should happen. Parallel algorithms, heterogeneous computing, networking & IO, reactive streams, and more: all critically important foundational technologies that await a standard abstraction for asynchronous computation.

In this talk, Eric Niebler and David Hollman dig into the Standard Committee's search for the basis operations that underpin all asynchronous computation: the long-sought Executor concept. The latest iteration of Executors is based on the Sender/Receiver programming model, which provides a generalization of many existing paradigms in asynchronous programming, including future/promise, message passing, continuation passing, channels, and the observer pattern from reactive programming. It also has surprising and deep connections to coroutines, which further demonstrates the model’s potential to be a truly unifying abstraction for asynchronous programming in C++20 and beyond.

Eric and David will present the short-term and long-term directions for Executors in ISO Standard C++, illustrating the design by walking through several implementation examples. They will talk about the direct connection between coroutines and the Sender/Receiver model and discuss what it means for the future of asynchronous APIs in C++. Finally, they will cover how the restrictions imposed by the Executors model should affect the way you write code today so your code is ready for the next big revolution in parallel and concurrent C++ programming.

Speakers
avatar for Eric Niebler

Eric Niebler

Sr. Dev., Facebook
I've been doing C++ professionally for the past 20 years, first for Microsoft, then as an independent consultant. Right now, I'm working on bringing the power of "concepts" and "ranges" to the Standard Library with the generous help of the Standard C++ Foundation. Ask me about the... Read More →
avatar for David Hollman

David Hollman

Senior Member of Technical Staff, Sandia National Labs
Dr. David S. Hollman has been involved in the ISO-C++ standard committee since 2016. He has been a part of a number of different papers in that time, including `mdspan`, `atomic_ref`, and—most prominently—executors and futures. Since finishing his Ph.D. in computational quantum... Read More →


Wednesday September 18, 2019 14:00 - 15:00
Aurora A

14:00

Abusing Your Memory Model for Fun and Profit
The most efficient concurrent C++ data structures used in the wild today usually achieve break-neck performance by either constraining their workload or constraining correctness to a particular memory model. The audience will learn about the Wild West of abusing memory models for performance and simplification, through real world examples. Non-blocking data structures and their benefits often come at the cost of increased latency because they require additional complexity in the common case. There are plenty of exceptions to this if the requirements of the data structure are relaxed, such as supporting only a bounded level of write or read concurrency or if correctness is constrained to a particular memory model. For this reason, well-designed specialized non-blocking data structures guarantee improved resiliency, throughput and latency in all cases compared to alternatives relying on traditional concurrency primitives. Specialized concurrent structures are common place in the Linux kernel and other performance critical systems.

You will learn about foundational concepts to understanding your underlying hardware's memory model and abusing memory models for fun and profit:
* Cache coherency
* Store Buffers
* Pipelines and speculative execution

This talk provides real-world examples that exploit the x86-TSO model to their advantage:
* A general technique to turn literally, any, open-addressed hash table into a concurrent hash table with low to negligible (near 0) cost. The transformation makes your hash table wait-free for writers and mostly wait-free for readers (lock-free in hypothetical worse cases) and is practical for languages such as C++. The mechanism is superior to the previously popular Azure lock-free hash table and even more importantly, practical for any non-garbage-collected environment. The overhead is negligible on TSO and low on non-TSO.
* Blazingly fast event counters. An extremely efficient replacement for condition variables is introduced and faster than any other alternative. This is implemented without requiring any heavy-weight atomic operations on the fast path by exploiting properties of the x86-TSO model.
* Scalable memory management: Exploit the ordering and visibility constraints of the underlying architecture for blazingly fast implementations of RCU and other safe memory reclamation schemes.
* and more.

Speakers
avatar for Samy Al Bahra

Samy Al Bahra

CTO, Backtrace
Samy Al Bahra is the cofounder of Backtrace, where he is helping build a modern debugging platform for today’s complex applications. Prior to Backtrace, Samy was a principal engineer at AppNexus, where he played a lead role in the architecture and development of many mission-critical... Read More →
PK

Paul Khuong

Vice President, Not Google
After toiling on his dissertation about mathematical optimisation methods for large-scale network design, Paul Khuong has spent the majority of his professional and hobbyist life reverse engineering and modernising C, C++, and Common Lisp legacy systems. When not engaged in code archaeology... Read More →


Wednesday September 18, 2019 14:00 - 15:00
Aurora C

14:00

Memory Resources in a Heterogeneous World
C++17 has introduced a new tool for memory management: std::pmr::memory_resource. This talk discusses it, but from a new perspective: primarily heterogeneous systems with non-uniform accesses to memory.

CUDA Thrust is a C++ parallel programming library built around the concepts and interfaces of the C++ standard library. When faced with the need for a composable interface for memory allocation in Thrust, we've reached to std::pmr - but std::pmr is inherently based around raw pointers, embedded deeply into signatures of virtual functions; this means it's not a great fit for a library that enables the use of GPUs for accelerated computation, which brings a need to handle different memory spaces in a type-safe way. Additionally, because accesses to memory are not uniform, the std::pmr model of pool resources doesn't quite work for CUDA and similar ecosystems. Thus came thrust::mr, which is a slight variation on std::pmr.

There have been many talks about std::pmr in general; this is not quite one of them, but rather a recap of how we ended up with the design that we've shipped as a part of Thrust, explaining the challenges we've encountered and the solutions we've settled on. I'll explain where we are similar to std::pmr, where we differ, and what are my musings on how the standard should evolve the idea of memory resources to properly support heterogeneous systems - but also why I think that some of the ideas we've ended up with are also applicable to homogeneous, uniform systems.

Speakers
avatar for Michał Dominiak

Michał Dominiak

System Software Engineer, Nvidia


Wednesday September 18, 2019 14:00 - 15:00
Summit 4/5

14:00

ADL: a thorough introduction in name taxonomy, customisation points and use cases in the context of templates
This talk introduces argument dependent lookup(ADL); name taxonomy; and customisation points in order to demonstrate and understand the peculiarities and the process of looking up names with ADL. Furthermore, this talk will demonstrate and discuss ADL thoroughly in the context of templates.

What is ADL?

ADL is a C++ feature that extends a name’s* lookup set by associating it with “extra” namespaces. The C++ standard mandates name taxonomy in a nonintuitive way that makes it difficult for young programmers to understand and use this feature. On the other hand, in advanced use cases of templates even experienced programmers sometimes struggle to reason about their code.

Why ADL?

It greatly enhances the usability of templates by allowing the compiler to extend the overload resolution of a template call allowing it look up more declarations which otherwise would be hidden from the compiler.

Library authors who design generic code don’t know firsthand how the users intent to use the library. Therefore, it’s essential to allow clients to customise the behaviour of their generic code on cases where they believe a more specialised implementation is desired. For instance, a qualified call to std::swap() is condemned to bypass any user defined overload of swap().

*The precise definition will be given in the name taxonomy category section of the outline

Speakers
avatar for Kostas Kyrimis

Kostas Kyrimis

Software Engineer, Codeplay Software
Kostas Kyrimis is a software engineer who is working on ComputeCpp; Codeplay’s implementation of the Khronos Group open standard SYCL for heterogenous computing. He advocates modern C++ practices, appreciates generic programming and algorithms and he is a supporter of expressive... Read More →


Wednesday September 18, 2019 14:00 - 15:00
Crest 3

14:00

Dependency Management at the End of the Rainbow
Do you dream of a good, ubiquitous "package manager for C++"?
You are not alone: It is one of the most requested feature by the community.

But despite the strong interest and the evident benefits this sought after unicorn would offer, existing solutions do not necessarily meet the community's expectations. Yet, other languages seem to have cracked this problem. What makes C++ more challenging?

We will try to define the scope of dependency management, talk about the C++ ecosystem and its tools. We will explore the advantages and drawbacks of the various ways to distribute and reuse C++ code and reflect on hot topics such as "binary compatibility", "building the world" and "living at head".

While this talk will not spawn unicorns, we might discover a few actionable guidelines to make our projects easier to build and share.

Speakers
avatar for Corentin Jabot

Corentin Jabot

Corentin Jabot is a member of the C++ committee and is mainly interested in portability and API design. He is working as a freelance developer in educational robotics.


Wednesday September 18, 2019 14:00 - 15:00
Crest 4/5

15:15

ISO SG14 Working Meeting
ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about

Wednesday September 18, 2019 15:15 - 16:15
Community Room

15:15

Leveraging Modern C++ in Quantitative Finance
Starting with C++11, new features were introduced into the language and Standard Library that were immediately useful for quantitative developers in financial trading and risk management, yet not very much about these applications seems to have been presented at C++ conferences. Even recently published textbooks for C++ courses in finance still lag in covering these powerful new tools. Welcome additions such as distributional random number generation, task-based concurrency, and lambda expressions provide express lanes to coding necessary components of financial libraries that were once far more time consuming and less reliable to implement. Furthermore, beginning with C++17, parallel STL algorithms have become available to speed up routine computations, typically by simply adding an additional parameter.

In addition, Statistical Distributions, Circular Buffers for time series data, MultiArrays for option pricing lattices, and Quadrature for numerical integration are well-designed Boost libraries that add to an increasingly robust arsenal at the quant developer’s disposal.

The presentation will close with a review of how C++ is perceived in quantitative applications work – not always positive unfortunately – and proposals for overcoming these challenges, specifically by emphasizing and building on the progress made since C++11, and further modernizing math features in Boost.

Quantitative developers in both finance and other technical fields will see how to quickly leverage modern and powerful mathematical tools in C++ with minimal overhead to get on with the job quickly. Members of the Committee and larger C++ community should come away with a clearer view of quantitative developers’ demands for the language, and ideas for growing C++’s presence in the rapidly growing domain of computational finance in particular, and mathematical programming in general.

Speakers
avatar for Daniel Hanson

Daniel Hanson

Lecturer, University of Washington, Applied Mathematics
Daniel Hanson spent 24 years in quantitative development in finance, primarily with C++ implementation of option pricing and portfolio risk models, and related library development. He now holds a full-time lecturer position in the Department of Applied Mathematics at the University... Read More →


Wednesday September 18, 2019 15:15 - 16:15
Crest 3

15:15

How to Implement Your First Compiler Feature: The Story of Concepts in Clang
C++20 will introduce Concepts into the language — a feature that allows defining which template arguments may be passed into a template. Concepts, long in the making, is set to revolutionize the way we write generic code. It improves code readability, error message readability, and compile times.

In December 2017, I, unrelated to Clang or the concepts proposal in any way, and not having any compiler engineering experience or background, volunteered to implement C++20 concepts in the Clang compiler. Now, a year and a half of working on the feature in my (little) spare time, I have reached conformance with the standard, and am close to merging into mainline Clang.

In this talk I will walk you through the story of how this all happened - how I got from just being a Concepts enthusiast with no knowledge of compiler architecture or open-source contribution to implementing one of the largest new features in recent C++ history in one of its leading compilers. I will show that taking the compiler into your own hands and contributing to the C++ community is very achievable, by showing the process I went through taking on this daunting task, giving real details of how I initially implemented some of the first aspects of the feature.

The talk assumes no prior knowledge of Concepts, and in fact does not focus very much on the feature itself but rather on the story of my involvement with it.

Speakers
avatar for Saar Raz

Saar Raz

A tech and C++ enthusiast, Saar programs in C++ mostly in his free time. In late 2017, he volunteered to implement C++20 Concepts in the Clang compiler, and has been working on that since, having recently reached a feature-complete beta stage. Other than C++ and tech, Saar also likes... Read More →


Wednesday September 18, 2019 15:15 - 16:15
Summit 4/5

15:15

Getting Allocators out of Our Way
The C++ standard library has supported custom allocators for as long as C++ itself has had a standard. Support for plugging in custom allocators has improved with each release, culminating (so far) in the 'pmr' allocator model in C++20 (with significant support in C++17). The substantial performance benefits of use of allocators (when used appropriately) are well-documented. Moreover, there are a variety of collateral benefits to clients -- such as rapid prototyping of alternative allocation strategies -- that make their use even more compelling. Still, the real-world costs associated with orchestrating the integration of allocators throughout a code base, including training, supporting tools, enlarged interfaces (and contracts), and a heightened potential for inadvertent misuse cannot be ignored. What's more, despite strong motivation to support allocator usage uniformly, there are corners of the C++ language (e.g., aggregates, lambda expressions, compiler-generated constructors) where the grammar simply doesn't admit them. Those that put up with these substantial cost and annoying inconsistencies do so because the need the manifest value that only allocators can provide, while others make due without.

But what if there were some feasible way to eliminate most of the real-world costs, leaving all the benefits to be enjoyed by everyone if and as desired? What would the skeptics say then?

In this session, Alisdair Meredith and Pablo Halpern will delve into the issues holding back widespread use of allocators, and present some ground-breaking ideas on how the language itself might move forward, making custom allocator support transparent in the majority of cases. We will discuss our ongoing work exploring this language-supported memory-allocator design space, including early experiments with the GCC and Clang compilers, and finally speculate on possible benefits to important areas of C++ beyond memory allocation alone.

Although not a prerequisite, we recommend attending John Lakos's talk "Value Proposition: Allocators-Aware (AA) software", given earlier in the week.

Speakers
avatar for Alisdair Meredith

Alisdair Meredith

Senior Developer, BloombergLP
Alisdair Meredith is a software developer at BloombergLP in New York, and the C++ Standard Committee Library Working Group chair.He has been an active member of the C++ committee for just over a decade, and by a lucky co-incidence his first meeting was the kick-off meeting for the... Read More →
avatar for Pablo Halpern

Pablo Halpern

President, Halpern-Wight, Inc.
Pablo Halpern has been programming in C++ since 1989 and has been a member of the C++ Standards Committee since 2007. His major contributions to the standard have been in the areas of parallel and vector programming constructs as well as on improvements to the usability of memory... Read More →


Wednesday September 18, 2019 15:15 - 16:15
Crest 4/5

15:15

Non-conforming C++: the Secrets the Committee Is Hiding From You
These days everyone talks about conforming and portable C++. Compiler vendors celebrate increasing conformance. Committee agents blind us with new shiny toys coming to the language. But there is a darker side to C++. A C++ you are not supposed to know about.

What if I told you there was more to C++ than what the agents of The Committee want us to believe? Over decades programmers all around the world have added features to the language in form of compiler extensions that let us do even greater things. Some are completely new, and some are lifted from C to C++ to allow some interesting, and sometimes more efficient, application.

We will see how statements can become expressions, how "goto" with extra superpowers can make your programs faster, and why there exists an operator named after a famous rock star. These are just a few examples of what to expect as listing any more would draw unwanted attention from The Committee. Unfortunately, because these extensions are not part of ISO C++, using any of them comes at the expense of portability. Or does it?

Speakers
avatar for Miro Knejp

Miro Knejp

Miro Knejp, Miro Knejp
Miro wrote his first line of C++ code in 1997 at the age of 12, and it has been his programming language of choice ever since. He’s especially passionate about low-level programming, assembly, 3D graphics, and games engineering. Miro holds a Master’s degrees in Computer Science... Read More →


Wednesday September 18, 2019 15:15 - 16:15
Summit 8/9

15:15

Meta++: Language Support for Advanced Generative Programming
For the past several years, we have been working with Herb Sutter on C++ language support for Metaclassses. In order to implement this feature, we’ve had to invent a myriad of new language features, including scalable features for static reflection, the ability to inject partial definitions classes, namespaces, and functions, and the ability to clone and inject (with modifications) existing declarations. All of these capabilities are a precursor to supporting metaclasses.

In this talk, we present the background of this work, the constraints under which the features were designed, and the current status of our work. We will discuss many of the new language features that we’ve created, by giving examples to show how they might be used. Finally, we’ll explain how these metaprogramming features support metaclasses and explain how metaclasses can be used as a new kind of tool for library developers.

Speakers
avatar for Andrew Sutton

Andrew Sutton

Owner, Lock3 Software, LLC
Andrew Sutton is an owner of Lock3 Software, LLC, a software research and development company in Kent, Ohio. His spends his days working on C++ language extensions in Clang and GCC and working on various WG21 language proposals.His past work included the design, specification, and... Read More →


Wednesday September 18, 2019 15:15 - 16:15
Aurora D

15:15

Making Testing C++ Binaries Practical @ Facebook Scale: A CI Story
When you have thousands of C++ services and you've just changed a core library, how do you make sure nothing broke? In 2016 we explored what that looks like from the perspective of the engineer changing the library (https://youtu.be/_YzUD9FvQlg). Now we're going to look at that same problem from perspective of an engineer working on developer experience, providing that safety, all the while trying to make sure we don't break the bank in machine costs. We'll notice patterns, including how saving machines nearly always means saving developer time and making build/test signal less flaky and more trustworthy. Better savings, better experience.

Most practically for you: we'll go over what can you do in your codebase to improve your testing workflows, ranging from low commitment concepts to high commitment ones. Also importantly: what anti-patterns can you avoid, so that you don't blockade future work in this area.

Our exploration will take us across topics including build tools, how the compiler/linker fits into the story, caching in unexpected places, deciding what to test (in great depth), batching, patterns/anti-patterns for defining workflows, and more. We will talk about real learnings from metric-driven changes to our core continuous integration experiences.

Speakers
avatar for Mark Isaacson

Mark Isaacson

Software Engineer, Facebook
Mark Isaacson is a Software Engineer at Facebook, where he works on improving the developer experience for all C++ programmers at Facebook.


Wednesday September 18, 2019 15:15 - 16:15
Aurora C

15:15

Inference in C++: The big picture
In every new standard, inference and type deduction has become more prominent in C++, making for perhaps the most remarkable evolution seen in any established programming language. From Function Template Argument Deduction in C++98, to `auto` in C++11, to generic lambdas in C++14, to Class Template Argument Deduction in C++17, to the high-profile introduction of Concepts in C++20, it is something every programmer now needs to understand, not just as individual features but as a coherent whole. Unfortunately, since inference has arrived piecemeal into C++, the big picture of how to program with it is often lost. Worse yet, idioms that used to be usable, like "almost always auto," are simply wrong in C++20.

In this talk, I will show how these seemingly individual features can combine in amazing ways in C++ 20 for best practices that can make your code more powerful, more performant, more maintainable and more understandable. I will illustrate these with nuts and bolts examples like how common code that used to take dozens of machine instructions can now use inference to run in a single instruction. By the end of the talk, I hope you will come out with not just a new understanding of this wondrous evolution but the skills and confidence to safely make the most of it

Speakers
avatar for Michael Spertus

Michael Spertus

Fellow, Symantec
Mike Spertus is a Fellow/VP at Symantec where he serves as Chief Scientist for Cybersecurity Services, an Adjunct Professor of Computer Science at the University of Chicago, where he teaches Advanced C++ and Big Data in the Masters Program in Computer Science, and a long-time member... Read More →


Wednesday September 18, 2019 15:15 - 16:15
Aurora A

16:45

Abseil's Open Source Hashtables: 2 Years In
Two years ago we announced a new hashtable we were pushing out across Google. One year ago, we open sourced it as part of Abseil. This talk is a retrospective about those efforts. We will cover:

- optimizations after the initial release
- lessons from rollout across google
- design choices that paid dividends
- global monitoring of hashtables
- discoveries made from monitoring

Speakers
avatar for Matt Kulukundis

Matt Kulukundis

Staff Software Engineer, Google
Matt is a senior software engineer on the C++ libraries team at Google.  Prior to Google he has worked on compilers, machine learning, and underwater robotics.  In his free time, he scuba dives in warm places.


Wednesday September 18, 2019 16:45 - 17:45
Aurora D

16:45

How to Write a Heap Memory Profiler
Have you ever wondered how profilers work? Did you ever run into a situation where you wanted to write your own custom profiler, but didn't know how to go about it? Then this talk is for you.

We will build a proof-of-concept heap profiler on Linux that implements the most important aspects of a custom tracing profiler: Intercepting function calls, runtime injection, call stack unwinding and debug symbol resolution. All of these concepts are generic and don't only apply to a heap profiler, we will just use that as a motivating example.

The talk will also touch on some of the lessons learned creating a productionized heap profiler called heaptrack: What data format should you use? How can you compress the data? What needs to be taken into account to support profiling on embedded platforms?

Combined, this talk will teach you about some of the layers behind the scenes of a standardized C++ application. Sadly, these layers tend to be platform dependent. For that reason, this talk concentrates on Linux, but the core principles apply to other platforms too.

Speakers
avatar for Milian Wolff

Milian Wolff

Senior Software Engineer, KDAB
Milian Wolff is a Senior Software Engineer at KDAB, Milian leads the R&D in tooling and profiling in which he has a special interest. Milian created Massif-Visualizer, heaptrack and hotspot, all of which are now used regularly to improve the performance of C++ and Qt applications... Read More →


Wednesday September 18, 2019 16:45 - 17:45
Aurora C

16:45

Pattern Matching: A Sneak Peek
Pattern matching brings a declarative approach to destructuring and inspecting complex data types. It’s a very powerful abstraction provided by many programming languages such as Haskell and OCaml, and more recently, Rust, Scala, and Swift.

In this talk, we’ll discuss the proposal in flight (https://wg21.link/p1371) to add pattern matching as a language feature in the C++. We’ll discuss why pattern matching is more relevant today to C++ than ever before, examples of how pattern matching simplifies the structure of code, and discuss the details of the concrete features being proposed.

The goal of the talk is to build an intuition for pattern matching, and gather feedback of the state of an early stage proposal.

Speakers
avatar for Michael Park

Michael Park

Software Engineer, Facebook
I'm a software engineer at Facebook, working on the C++ libraries and standards team. My focus for C++ is to introduce pattern matching to facilitate better code.


Wednesday September 18, 2019 16:45 - 17:45
Summit 8/9

16:45

The One-Decade Task: Putting std::atomic in CUDA.
Some tasks are projected to take a long time to complete, and many take more time than planned. We didn't plan for it at the onset, but putting std::atomic into CUDA will have taken almost 10 years when it's all over. Many exceptional engineers contributed, everyone learned a lot, I would do it again 100%.

In this talk I will share 10 stories from the trenches in the 10-year arc of this "one task", each with a concise lesson I learned and/or a word about people that made a big difference. You will get a glimpse of what it's like to work on a hardware team, take a quick dive into a seminal computer science thesis, learn the basics of a computer modeling language called Alloy, get a tour of the libcxx <atomic> header... and more! 

Speakers
avatar for Olivier Giroux

Olivier Giroux

Distinguished Engineer, NVIDIA


Wednesday September 18, 2019 16:45 - 17:45
Summit 6/7

16:45

Contract use: Past, Present, and Future
WG21 has established SG21 to finalize a design for contract checking in C++.  For nearly 15 years, Bloomberg has been leveraging a macro-based contract-checking facility that has contributed greatly to the ongoing design of the future, language-based one.  In this talk, we will walk through the ups and downs of having implemented industrial-strength runtime pre-condition checking in real-world scenarios.  We will discuss how we initially used our home-grown macro-based solution to successfully detect bugs, how we've had to evolve our methodology over the years, and how these needs will help guide SG21 contracts so that you'll be able to take maximum advantage of language based contract when they arrive.

We will provide a detailed review of the most important features (to us) that contract checking in C++ will need to provide.  Then we will discuss what might be learned from what we've used successfully in the past so that contract checks can be added to large libraries, deployed across large organizations, and maintained as those organizations continue to adapt and grow.

Speakers
JB

Joshua Berne

Software Engineer, Bloomberg
Joshua Berne has been programming in C++ since first reading "The C++ Programming language" some time in the last century. After many years building distributed trading systems in other languages, Joshua has recently been working on the core libraries at Bloomberg. This has primarily... Read More →


Wednesday September 18, 2019 16:45 - 17:45
Crest 3
  • Level Intermediate, Advanced
  • Tags contracts

16:45

Data in the Type System: Complex Non-Type Template Parameters in C++20
This talk is about a new feature in C++20 which has significant implications
for compile-time programming: allowing class types to be used in non-type
template parameters (NTTPs).

Several talks at last year's CppCon pushed the boundaries of compile-time
string processing, with a common catch: reliance on an extension to C++'s UDLs
that the committee has been refusing to standardise since 2013. That extension
provides an easy way to get string data into the type system rather than just
into constexpr variables,

The talk will cover what that extension is, why it was never standardised, and
how class-type NTTPs make it unnecessary. We'll then talk about what can
and can't be done with class-type NTTPs, what the challenges of adding them to the
language were, and take a look at some things they've been used for.

Speakers
JS

Jeff Snyder

Vice President, PDT Partners
Jeff is a software developer in London's financial services industry, and has been an active member of the C++ standards committee since 2013 focusing on core language feature development. He started learning C++ around 2001, studied Computer Science at the University of Cambridge... Read More →


Wednesday September 18, 2019 16:45 - 17:45
Summit 4/5

16:45

Killing Uninitialized Memory: Protecting the OS Without Destroying Performance
Are you interested in what goes in to creating and shipping vulnerability mitigations to over 600 million devices?

Between 2017 to mid-2018, security researchers found and reported over 100 vulnerabilities in Windows resulting from uninitialized memory either leaking across a security boundary or uninitialized memory being used. These types of issues have also been used in several real world exploits. Clearly something needed to be done, but what?

One potential solution to the problem was automatically initializing variables in C/C++ code, however, this comes with potentially significant performance and compatibility problems. In this talk, we’ll walk you through the journey of prototyping, building, and shipping a mitigation named InitAll which does exactly that. Along the way we’ll look at specific vulnerabilities, mitigation implementation details, performance problems, compiler optimizations, application compatibility issues, and more.

We’ll finish up by sharing some cool bugs this mitigation has already killed and share our thoughts on the future of safer C/C++ code.

Speakers
JB

Joe Bialek

Software Security Engineer, Microsoft
Joe Bialek is a security engineer in the Microsoft Security Response Center's Vulnerability & Mitigations team. Joe spends his time eliminating vulnerability classes, creating exploit mitigations, and finding security bugs.
avatar for Shayne Hiet-Block

Shayne Hiet-Block

Software Engineer, Microsoft
Shayne is a software engineer working on the Microsoft Visual C++ team, where I've worked for over 13 years. Most of my focus has been on C/C++ code generation. I've worked on general feature work for back-end code generation, optimizations and security.


Wednesday September 18, 2019 16:45 - 17:45
Crest 4/5
  • Level Beginner, Intermediate, Advanced
  • Tags security

16:45

Type punning in modern C++
Type punning is often used in C++ for fast floating-point math, deserialising C++ objects from a sequence of bytes, and other purposes. Popular techniques involve unions, reinterpret_cast, and memcpy. C++20 provides new useful tools, such as bit_cast. And there are proposals to provide even better control over C++ object creation in the future.

This talk is a comprehensive overview of all of these techniques. We will discuss when and how they can be used safely without causing undefined behaviour, what C++ does and does not allow you to do (and why), existing holes in the C++ language, and how to fix them. In the process, we will cover important C++ concepts such as object lifetime, value representations, and aliasing rules.

Speakers
avatar for Timur Doumler

Timur Doumler

Timur Doumler is a C++ developer specialising in audio and music technology, active member of the ISO C++ committee, and part of the includecpp.org team. He is passionate about building communities, clean code, good tools, and the evolution of C++.


Wednesday September 18, 2019 16:45 - 17:45
Aurora A

16:45

ISO SG14 Working Meeting
ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about

Wednesday September 18, 2019 16:45 - 18:00
Community Room

18:00

#include Dinner
Separate registration is required for this event.

Join members of #include<C++> for a celebration dinner. Meet other attendees who value inclusion and diversity, and network with some of the most influential members of the C++ community.

If you are alone at the conference, be sure to come to the dinner to meet people and feel more connected. If you're "the only one" at your workplace come and connect to a larger group and share advice and support.

After a buffet dinner we will have a panel discussion moderated by Kate Gregory, and then there will be more time to strengthen friendships and learn from each other. We plan a special evening - please be part of it!

Note: if the price is an issue for you (for example, an employer will not cover it) please contact #include<C++> to apply for a scholarship to the dinner. Limited numbers are available. If you are able to contribute to the scholarship fund and ensure another attendee is able to benefit from the dinner, we'd love to hear from you, too.

[CppCon 2019 Registration]

Moderators
avatar for Kate Gregory

Kate Gregory

Partner, Gregory Consulting
Kate Gregory has been using C++ since before Microsoft had a C++ compiler. She writes, mentors, codes, and leads projects, in both C++ and .NET, especially for Windows. Kate is a Microsoft Regional Director, a Visual C++ MVP, has written over a dozen books, and speaks at conferences... Read More →

Speakers
avatar for Guy Davidson

Guy Davidson

Principal Coding Manager, Creative Assembly
avatar for JeanHeyd Meneide

JeanHeyd Meneide

Student, Columbia Unviersity
JeanHeyd "ThePhD" is a student at Columbia University in New York. Most of his programming is for fun and as a hobby, even if his largest open-source contribution -- sol2 -- is used across many industries. He is currently working towards earning his own nickname, climbing the academic... Read More →
avatar for Simon Brand

Simon Brand

C++ Developer Advocate, Microsoft
Simon is Microsoft’s C++ Developer Advocate. Their background is in compilers and debuggers for embedded accelerators, but they’re also interested in generic library design, metaprogramming, functional-style C++, undefined behaviour, and making our communities more welcoming and... Read More →
avatar for Clare Macrae

Clare Macrae

Director, Clare Macrae Consulting Ltd
Clare has worked in software development for over 30 years, and in C++ for 20 years. Since 2017, she has used her spare time to work remotely with Llewellyn Falco on [ApprovalTests.cpp](https://github.com/approvals/ApprovalTests.cpp), to radically simplify testing of legacy code... Read More →
MD

Michael Daum

Senior Tools Developer, Epic Games


Wednesday September 18, 2019 18:00 - 20:15
Social Hall (Aurora B)

20:30

Lightning Talks
The adventure continues — come for bite size talks you'll want more of!

Moderators
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.

Wednesday September 18, 2019 20:30 - 22:00
Aurora A

20:30

Open Content Sessions: TBA
Wednesday September 18, 2019 20:30 - 22:00
_N

22:00

Student Reception
Reception for members of the student program.

Sponsors
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →


Wednesday September 18, 2019 22:00 - 23:30
_N
 
Thursday, September 19
 

08:00

Open Content Sessions: TBA
Thursday September 19, 2019 08:00 - 08:45
_N

08:00

Cpp.Chat - Live Episode!
Join us for a live recording of Cpp.Chat with Jon and Phil.

Speakers
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.


Thursday September 19, 2019 08:00 - 08:45
Summit 4/5

09:00

Back to Basics: Understanding Value Categories
You may be familiar with the terms lvalue, rvalue, and xvalue, if only because they occasionally appear in compiler error messages. However, if you have only a vague understanding of what they mean, you're not alone. Lvalues, rvalues, and xvalues aren't actually language features, but rather semantic properties of expressions and sub-expressions. Understanding these properties provides valuable insights into the behavior of built-in operators, the code generated to execute those operators, and the meaning of some otherwise cryptic compiler error messages. Understanding these properties is also essential for working effectively with lvalue and rvalue reference types, as well as overloaded operators.

This session explains why the language distinguishes among lvalues, rvalues, and xvalues. It describes how the semantic properties of lvalues, rvalues, and xvalues are different and how those properties are reflected in the behavior of lvalue and rvalue references.

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates


Thursday September 19, 2019 09:00 - 10:00
Aurora C

09:00

Time Travel: Applying Gradual Typing to Time Types with Clang's LibTooling
Libraries for C++ are constantly evolving, with new APIs being added, old ones being deprecated and functionality continually changing. In past CppCon talks, I've described in abstract how Google manages this change by applying large-scale changes across our C++ codebase using clang's libTooling infrastructure.

In this talk, we'll put this previous work in practice by demonstrating how we use clang-tidy and clang's libTooling library to improve type safety of time types across Google's 250M lines of C++. Using tools currently open sourced as part of clang-tidy, we'll show how the underlying model of time types allow us to migrate from a collection of integers and floating point types to the much more strongly typed `absl::Time` and `absl::Duration` types representing time instants and intervals. Along the way, we'll discover how this process finds existing bugs and prevents new ones from creeping in.

This "gradual typing" technique is not limited to just Time types, and we'll explore how this can be used to improve pointer ownership deduction and other places where more constraining types eliminate classes of bugs.

Speakers
avatar for Hyrum Wright

Hyrum Wright

Software Engineer, Google
@hyrumwright">Hyrum Wright hates C++ less than the rest of the programming languages he's worked with, and works on large-scale change infrastructure at Google. He writes programs to rewrite other programs, and will eventually put himself out of a job. In a former life, he was an... Read More →


Thursday September 19, 2019 09:00 - 10:00
Crest 3

09:00

Asynchronous Programming in Modern C++
With the advent of modern computer architectures characterized by -- amongst other things -- many-core nodes, deep and complex memory hierarchies, heterogeneous subsystems, and power-aware components, it is becoming increasingly difficult to achieve best possible application scalability and satisfactory parallel efficiency. The community is experimenting with new programming models that rely on finer-grain parallelism, and flexible and lightweight synchronization, combined with work-queue-based, message-driven computation. The recently growing interest in the C++ programming language in industry and in the wider community increases the demand for libraries implementing those programming models for the language.

In this talk, we present a new asynchronous C++ parallel programming model that is built around lightweight tasks and mechanisms to orchestrate massively parallel (and -- if needed -- distributed) execution. This model uses the concept of (Standard C++) futures to make data dependencies explicit, employs explicit and implicit asynchrony to hide latencies and to improve utilization, and manages finer-grain parallelism with a work-stealing scheduling system enabling automatic load balancing of tasks.

We have implemented such a model as a C++ library exposing a higher-level parallelism API that is fully conforming to the existing C++11/14/17 standards and is aligned with the ongoing standardization work. This API and programming model has shown to enable writing highly efficient parallel applications for heterogeneous resources with excellent performance and scaling characteristics.

Speakers
HK

Hartmut Kaiser

STE||AR Group, CCT/LSU
Hartmut is a member of the faculty at the CS department at Louisiana State University (LSU) and a senior research scientist at LSU's Center for Computation and Technology (CCT). He received his doctorate from the Technical University of Chemnitz (Germany) in 1988. He is probably best... Read More →


Thursday September 19, 2019 09:00 - 10:00
Aurora A

09:00

Are We Macro-free Yet?
What do you do when an API or even a toolchain is not available in some of your build configurations? #ifdef? When we are talking about writing modern C++, we may have forgotten that code involving preprocessor is not even in C++. We all learned that macros are bad, but very often, when we rely on them by ourselves, we rationalize it, and they became "inexpensive," "necessary," and sometimes "maintainable." After ripping out the last macro introduced in a proprietary C++17 codebase, I concluded that none of these are true if you were introduced to a design without macros.

This talk starts from one of the most demanded and least maintainable use cases of macros, conditional compilation, shows how not to introduce macros from the build system, and discusses the macro-free practice's impact on design and testing. And then, we expand the topic to other areas where we have macros to eliminate, such as logging and metadata macros, discuss the motivations and solutions given C++20. We will finish the talk with advice about what are the macros you want to avoid when we are moving towards a macro-free future.

Speakers
avatar for Zhihao Yuan

Zhihao Yuan

Software Enginner, SimpleRose Inc
Zhihao Yuan is a Parallel Computing Engineer at SimpleRose Inc. He participated in standardizing designated initializers in C++20. When freed from CMake, he enjoys a fair amount of anime and light novels.


Thursday September 19, 2019 09:00 - 10:00
Summit 4/5

09:00

This Videogame Programmer Used the STL and You Will Never Guess What Happened Next
The STL is sometimes seen as a strange and dangerous beast, especially in the game development industry.
There is talk about performance concerns, strange behaviours, interminable compilations and weird decisions by a mysterious "committee".
Is there any truth to it? Is it all a misconception?

I have been using the STL in a production videogame that is mostly CPU bound and in this talk we will unveil the truth behind the rumours.
We will start by a discussion about the most common criticism against the STL and its idioms made by the gamedev community.
Then we will see a few practical examples through STL containers, explaining where they can do the job, where they might be lacking and what alternatives can be used.
Finally we will conclude with some ideas on how we can improve both the STL for game developers and also how to foster better discussion on the topic in the future.

At the end of this talk, attendees should have a solid understanding of why the STL is sometimes frowned upon, when it makes sense to look for alternatives to the standard and most importantly when it does not.

Speakers
avatar for Mathieu Ropert

Mathieu Ropert

Experienced Programmer, Paradox Development Studio
French C++ expert working on (somewhat) historical video games. Decided to upgrade his compiler once and has been blogging about build systems ever since. Past speaker at CppCon, Meeting C++ and ACCU. Used to run the Paris C++ User Group. Currently lives in Sweden.



Thursday September 19, 2019 09:00 - 10:00
Aurora D

09:00

Avoid Misuse of Contracts!
With a contract-checking facility (CCF) eventually becoming a part of the C++ language and macro-based CCFs being readily available (e.g., in GSL), it is crucial that we have guidelines for the proper application of contract-checking to avoid their becoming a proverbial hammer with everything looking like a nail! In this talk, we aim to articulate solid principles allowing us to identify scenarios that contract checking is designed (and/or is able) to address. What's more, we'll examine "potential use cases” where using a CCF might seem like a great idea, but in reality it would be a grave mistake to do so. With these principles and a variety of examples on both sides of the fence, we hope to assist attendees in developing a strong intuition for the proper use of contracts (and a CCF to check them) in their own projects.

After a brief review of the capabilities (rather than syntax) of a typical contract-checking facility, we will look into its primary purpose: to help improve the robustness of code written with narrow contracts (i.e., those having preconditions). This review will organically lead to the two core principles of contracts checking: (I) in a defect-free program, function contracts should never be violated, and (II) whether any given aspect of a contract is checked should make no observable (meaningful) difference except, perhaps, runtime performance. With this principles in mind, we will look at a variety of real-world, practical examples where the (sometimes essential) behavior of the program would change should a contract-checking statement be removed. In particular we will see why using any CCF for input validation is wrong-minded. Along the way, we’ll take a nuanced look at why careful use of a CCF for some important real-world use cases that technically violate the letter of these guidelines, might still be in keeping with their spirit, and thereby admit (principled) practical use of a CCF in controlled deviations from what would otherwise be considered text-book best practices.

Speakers
RK

Rostislav Khlebnikov

Senior Software Engineer, Blooomberg LP


Thursday September 19, 2019 09:00 - 10:00
Summit 6/7

09:00

Removing Metaprogramming From C++, Part 1 of N: constexpr Function Parameters
C++ has, buried within it, no less than four "general-purpose" programming languages. We have regular run-time C++, constexpr, templates, and macros. This presentation will cover a new proposal for C++: constexpr Function Parameters. It aims to make C++ a much more powerful language by helping to merge constexpr programming into regular C++. This will allow writing code that is faster, is easier and more natural to use, is terser, and catches errors at compile time. This new language feature would provide a way to annotate a function parameter as constexpr, letting you do things like overload on whether something is a compile-time constant, or pass constants to things that cannot have template parameters (like constructors and operators).

This presentation will focus on the principles used in the design of C++ and in this feature. From those principles, we will go into the details of the proposal. This presentation will briefly cover what constexpr is used for as of C++20 (the version of C++ that is being finalized now and will be officially 'released' in 2020). The proposal for constexpr function parameters is targeted at C++23 ('released' in 2023). The presentation will briefly cover the standardization process and timeline.

Recommended background (none of these are necessary, but they are helpful):
* No Shadow Worlds: https://probablydance.com/2015/02/16/ideas-for-a-programming-language-part-3-no-shadow-worlds/
* Inventing on Principle: https://vimeo.com/36579366
* constexpr: Introduction (as of C++11 and C++14) https://www.youtube.com/watch?v=fZjYCQ8dzTc

The proposal paper can be found at https://github.com/davidstone/isocpp/blob/master/constexpr-parameters.md

Speakers
avatar for David Stone

David Stone

Software Engineer, Uber
David Stone works on autonomous vehicles at Uber in Louisville, Colorado. He is a member of the C++ standardization committee, where he chairs the Modules Study Group (SG2) and is the vice chair of the Evolution Working Group. He has written an algorithm that solved the traveling... Read More →



Thursday September 19, 2019 09:00 - 10:00
Summit 8/9

09:00

Destructor Case Studies: Best Practices for Safe and Efficient Teardown
Destructors are arguably the most important feature of C++. By allowing deterministic resource management, destructors enable proper cleanup at the right time. However, implementing destructors correctly can be challenging even for experienced developers, and ensuring destructors are optimized can be critical in high performance code. In this presentation, we’ll examine a series of real world destructors, including some from the C++ Standard Library, to generate a list of best practices.

Speakers
avatar for Pete Isensee

Pete Isensee

Engineering Manager, Facebook Reality Labs
Pete Isensee has programmed video games, shipped three generations of Xbox consoles at Microsoft, created VR experiences at HBO, published dozens of technical articles, and taught C++ tips & tricks to game developers worldwide. Pete is currently a software engineering manager at Facebook... Read More →


Thursday September 19, 2019 09:00 - 10:00
Crest 4/5

10:30

Better Code: Relationships
Computer scientists are bad at relationships. Nearly every program crash is rooted in a mismanaged relationship, yet we spend most of our time discussing types and functions and not the relationships connecting them together. This talk looks at common ways data and code are connected in an application, how those relationships are typically represented, and the problems caused by the use, and misuse of these paradigms. Then we'll look at ways to model these relationships in C++ and use them to build correct applications.

Speakers
avatar for Sean Parent

Sean Parent

Sr. Principal Scientist, Adobe / Photoshop
Sean Parent is a principal scientist and software architect for Adobe’s digital imaging group. Sean has been at Adobe since 1993 when he joined as a senior engineer working on Photoshop and later managed Adobe’s Software Technology Lab. In 2009 Sean spent a year at Google working... Read More →


Thursday September 19, 2019 10:30 - 12:00
Aurora A

12:05

Book Signing: Arthur O'Dwyer
Arthur will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Arthur O'Dwyer is the author of "Colossal Cave: The Board Game," "Mastering the C++17 STL" (the book), and "The STL From Scratch" (the training course). He runs professional C++ training courses, is occasionally active on the C++ Standards Committee, and has a blog mostly about C... Read More →


Thursday September 19, 2019 12:05 - 12:25
Bookstore

12:05

Book Signing: Nicolai Josuttis
Nicolai will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries.He is well known in the programming community because he not only speaks and... Read More →


Thursday September 19, 2019 12:05 - 12:25
Bookstore

12:30

Lightning Talks
The adventure continues — come for bite size talks you'll want more of!

Speakers
avatar for Kate Gregory

Kate Gregory

Partner, Gregory Consulting
Kate Gregory has been using C++ since before Microsoft had a C++ compiler. She writes, mentors, codes, and leads projects, in both C++ and .NET, especially for Windows. Kate is a Microsoft Regional Director, a Visual C++ MVP, has written over a dozen books, and speaks at conferences... Read More →


Thursday September 19, 2019 12:30 - 13:30
Summit 8/9

12:30

Desktop Applications Development Roundtable
We will give a short intro talk to discuss the work that Snap is doing in C++ for cross-platform desktop development. Then we will open the room to discussion for other experiences from others.

Interesting areas for us have been: Architecture, Communication Models, Open GL, Plugins, Scripting, Qt, Crash Reporting, Analytics, Development lifecycle.

Speakers
avatar for Artem Yerofieiev

Artem Yerofieiev

Software Engineering Manager, Snap
Working on Lens Studio - augmented reality editor for Windows and Mac which allows anyone create AR experiences for Snapchat.


Thursday September 19, 2019 12:30 - 13:30
Summit 6/7

12:30

Mobile C++ Development Roundtable
We will give a 10 min intro talk to discuss the work that Snap is doing in C++ for for mobile and cross-platform development and open the room to discussion for other experiences from others. Interesting areas for us have been: performance of JNI, cross-language build systems like bazel, code sharing, onboarding new devs to C++.


Thursday September 19, 2019 12:30 - 13:30
Crest 3

12:30

C++ Community Building Birds of a Feather
Are you a C++ community leader? Would you like to be?

If you are or would like to be working to build a C++ community, either on-line or in meat space, we'd like to hear from you about your challenges and your successes.

We'll hear from sucessful community leaders, answer questions, and share resources and ideas. We'll discuss user groups, conferences, podcast, and online communities and forums.

Moderators
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →
avatar for Stephan T. Lavavej

Stephan T. Lavavej

Principal Software Engineer, Microsoft
Stephan T. Lavavej is a Principal Software Engineer at Microsoft, maintaining Visual C++'s implementation of the C++ Standard Library since 2007. He also designed a couple of C++14 features: make_unique and the transparent operator functors. He likes his initials (which people can... Read More →
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

CUDA C++ Core Libraries Lead, NVIDIA
Bryce Adelstein Lelbach has spent nearly a decade developing libraries in C++. Bryce is passionate about C++ evolution and is one of the leaders of the C++ community. He is an officer of ISO/IEC JTC1/SC22/WG21, the C++ Standards Committee. Bryce chairs both the C++ Committee's Tooling... Read More →
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.
avatar for Jens Weller

Jens Weller

CEO, Meetingcpp GmbH
Jens Weller has worked, since 2007, as a freelancer in C++, specialising in consulting, training and programming C++. He started with programming C++ back in 1998. He is an active member of the European C++ community and the founder of the Meeting C++ platform and conference. Jens... Read More →

Thursday September 19, 2019 12:30 - 13:30
Community Room

12:30

On Writing a C++ Book: The Story of "C++ Crash Course"
In this talk, I discuss writing my forthcoming book, C++ Crash Course. This talk will be useful to two audiences: (a) to the book’s target readership, and (b) to those interested in writing a book of their own.

For the book’s target readership, I’ll discuss why I wrote it, what it’s about, and why its approach is different from existing C++ books. I’ll discuss the chapter layout and how it supports the book’s brick-by-brick pedagogical approach. 

For those interested in writing a book of their own, I’ll give my reflections on what kinds of motivations are likely to sustain you through the harrowing book-writing process. I’ll discuss the technical nonfiction publisher business model, submitting a book proposal, and negotiating a contract. 

Finally—assuming I have hard copies in hand by the beginning of CppCon—I’ll be giving away some books to a few lucky attendees. I will follow up the talk with a book signing as well.

Speakers
avatar for Josh Lospinoso

Josh Lospinoso

Chief Research Officer, Shift5
I wrote C++ Crash Course. In my day job, I protect planes, trains, and tanks from cyberattack.


Thursday September 19, 2019 12:30 - 13:30
Crest 4/5

13:35

Book Signing: Josh Lospinoso
Josh will be on hand near the bookstore in Rockies Square (across from Bag Check) to sign books.

Thursday September 19, 2019 13:35 - 13:55
Bookstore

14:00

Back to Basics: Function and Class Templates
Generic programming is a collection of techniques for implementing software components that you can adapt easily for a variety of uses. In C++, templates are the primary tool for generic programming, and they're used throughout the standard library. Templates can be functions or classes, as well as variables or type aliases.

This session is for C++ programmers who would like to shore up their understanding of templates. It describes many C++ template features and offers insights into how compilers use compile-time information, such as types and values, to process templates.

This session begins by showing how to define function templates and how call them using explicitly-specified or deduced template arguments. It then covers class templates, including the behavior of static data members, friends, and nested classes appearing in class templates. It explains why template definitions require explicit qualification or the keyword typename in some situations. It presents the different forms of template parameters and corresponding arguments, as well as default arguments. Throughout, it clears up common misunderstandings regarding templates, such as the differences among the mechanisms of instantiation and the different flavors of specialization.

Speakers
avatar for Dan Saks

Dan Saks

President, Saks & Associates
Dan Saks is the president of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Dan used to write the “Programming Pointers” column for embedded.com online. He has also written columns for numerous print publications... Read More →


Thursday September 19, 2019 14:00 - 15:00
Aurora D

14:00

Range Algorithms, Views and Actions: A Comprehensive Guide
STL algorithms are something every C++ programmer should know. With ranges being voted in C++ 20, there are even more useful tools that we should at least be aware of, if not use daily.

Using ranges helps writing a code which is great in expressiveness and safety and does not fall behind in performance. In this talk we will cover what ranges add to the C++20 standard library, as well as go over all the different views and actions available in range-v3 library which can be used today.

This talk is inspired by Jonathan Boccara’s talk "105 algorithms in less than an hour".

Speakers
avatar for Dvir Yitzchaki

Dvir Yitzchaki

Sr. Software Engineer, Verizon Media
Dvir is a senior software engineer at Verizon Media. He has been doing C++ for 12 years, lately only for a hobby. He has contributed to a number of open source projects including Hunter package manager and Catch2 unit testing framework. He has spoken for Core C++ meetup and confe... Read More →


Thursday September 19, 2019 14:00 - 15:00
Summit 8/9

14:00

Structured Concurrency: Writing Safer Concurrent Code with Coroutines and Algorithms
Traditional approaches to concurrency and asynchronous programming, such as futures or threads, can be difficult to use safely, particularly in the presence of exceptions. These abstractions often implicitly introduce concurrency to your program in an unstructured way making it difficult to reason about your code.

The principle of “structured concurrency” aims to do for concurrent/async programming what constructs like if/while/for did for control-flow and what destructors and RAII did for object lifetimes - provide a structured way to think about concurrency in your programs by encapsulating common concurrency patterns into reusable algorithms.

This talk covers using the principles of “structured concurrency” in conjunction with coroutines to make it easier to write concurrent programs that are safer and more efficient than traditional approaches.

Speakers
avatar for Lewis Baker

Lewis Baker

Software Engineer, Facebook


Thursday September 19, 2019 14:00 - 15:00
Aurora A

14:00

The Truth of a Procedure
One way of modeling a procedure mathematically is to treat it as a statement about the ways in which events can be arranged by a computer. This conception brings programming into the domain of mathematical logic, the study of truth and proof in formal languages.

In this lecture, I will explain how to read a procedure and its interface as a sentence, how that sentence may be true or false, possible or impossible, necessary or provable.

This material is the mathematical background for my other lectures on assertions and function interfaces, including "What is the Basic Interface?" which was presented at CppCon 2016.

Speakers
avatar for Lisa Lippincott

Lisa Lippincott

Software Architect, Tanium
Lisa Lippincott designed the software architectures of Tanium and BigFix, two systems for managing large fleets of computers. She's also a language nerd, and has contributed to arcane parts of the C++ standard. In her spare time, she studies mathematical logic, and wants to make computer-checked... Read More →


Thursday September 19, 2019 14:00 - 15:00
Summit 6/7

14:00

Reading Binary Data with Style: A Serialization Framework for C++17
Reading structured data from a file or network stream remains cumbersome and error-prone in C++, especially when data validation is required. Existing approaches require too much boilerplate, aren't always portable, and may be restricted to specific data sources. Despite these limitations, there have been few alternatives in the past.

This talk introduces blobify, an experimental serialization framework for C++17 designed to convert user-defined structs to binary data blobs and vice-versa. Contrary to similar frameworks, blobify largely automates the process, and it includes an embedded domain specific language to handle data validation.

I will describe blobify's API design and usage, explain how it works under the hood, and provide an outlook at what the Reflection TS has in store for future improvements.

Speakers
avatar for Tony Wasserka

Tony Wasserka

Consultant
Low-level anything: Tony is a consultant and long-term C++ enthusiast who has worked on the console emulator projects Dolphin (GameCube/Wii), PPSSPP (PSP), and Mikage (3DS) since 2010. More recently, he has worked on Vulkan graphics drivers for PowerVR graphics processors. His main... Read More →


Thursday September 19, 2019 14:00 - 15:00
Summit 4/5
  • Level Beginner, Intermediate
  • Tags C++17

14:00

Next generation unit testing using static reflection
Unit testing is a widely accepted practice in the software engineering industry, which has been demonstrated to help reduce bugs in production and provide faster iteration cycles for development, helping with development trends such as agile development or continuous deployment.

While being part of the core of modern development, C++ due to its current language limitations lacks a unit testing framework that's expressive and concise enough to keep developers focused around tests themselves and not around all the code needed to support the tests. Current unit testing solutions for C++ usually require arcane constructions through macros, intrusive changes in the tested codebase in the form of class hierarchies for easy mocking, and in some cases manual test registration.

I present unittest, a proof of concept unit testing framework for C++14 based on Python's standard unittest package. unittest avoids the problems described above by using static reflection to figure out what code describes a unit test, and what library functions should be mocked as part of the test. Current C++14 implementation is based on tinyrefl, a libclang based static reflection tool, but the same concept will be possible to implement through future C++ reflection features like those proposed by the Reflection Technical Specification.

Speakers
avatar for Manu Sánchez

Manu Sánchez

Software Engineer, By Access Control Systems
Manuel Sanchez started playing with modern C++ during his first year at the university, evolving into a template metaprogramming nerd and so-called C++ "expert". In September 2014 Manuel joined the Spanish startup biicode as a C++ consultant, helping the main developers packaging... Read More →


Thursday September 19, 2019 14:00 - 15:00
Crest 4/5

14:00

The C++ ABI for Dummies
The ABI (Application Binary Interface) has a huge impact on C++ libraries. But what does that mean concretely?

This talk will explain what we mean by the ABI in the context of C++. Starting from the ground up and focusing on the Itanium C++ ABI specification, we will understand what is part of the ABI and how changes in your C++ source code can result in changes to the ABI. We will also cover what ABI stability means, what use cases ABI stability enables, and what some of the costs of maintaining ABI stability are.

Keeping the point of view of a library implementer, we will see how one can control what is part of a library's ABI, using both standard and non-standard techniques like attributes. Finally, we will also see some tools that can be used to inspect parts of the ABI of a built program and detect changes to it.

Speakers
avatar for Louis Dionne

Louis Dionne

C++ Standard Library Engineer, Apple
Louis is a math and computer science enthusiast who got swallowed by the C++ monster when he was a naive, unsuspecting student. He now works for Apple, where he is responsible for libc++, the Standard Library shipped with LLVM/Clang. He is a member of the C++ Standards Committee and... Read More →


Thursday September 19, 2019 14:00 - 15:00
Aurora C

14:00

The Dawn of a New Error
As a community we've tried many different ways to express, propagate and handle error conditions in our code over the years. Each seem to have different trade-offs, with none being perfect in all cases.

This presentation is the follow-up to my earlier talk, "Option(al) Is Not a Failure", where I surveyed existing error-handling approaches and score them against each other, leading up to the new proposal, p0709, "Zero-overhead deterministic exceptions".

We'll summarise some of that background so we're all on the same page, but in this talk we're going to dig into the proposal in more depth - and look at the supporting proposals, p1028 (std::error) and p1029 ([[move relocates]]) and others. We'll also comment similar mechanisms in other languages, notably Swift, to get an idea of how it might work out in practice.

Speakers
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.


Thursday September 19, 2019 14:00 - 15:00
Crest 3

15:15

Don't Package Your Libraries, Write Packagable Libraries! (Part 2)
Amid an avalanche of packaging solutions, who's side should you take? Trick question; you can support all of them! Discover the fundamental principles that make your library easy for _others_ to package so you don't have to! As a bonus, your builds will be faster, simpler, and more maintainable.

This talk covers the lessons learned from packaging 1,000 libraries in vcpkg, from the simplest single-header to the massive framework of Qt. We'll dissect the open source package maintainer's perspective and walk through the top library mistakes, supported by real-world examples from the vcpkg catalog.

This is a spiritual successor of the 2018 Cppcon lecture of a similar name, with all new material and direct examples of "What To Do" to complement the avalanche of "What Not To Do". It does not require knowledge of the previous talk and is instead complementary.

Speakers
RS

Robert Schumacher

Software Developer, Microsoft


Thursday September 19, 2019 15:15 - 15:45
Aurora D

15:15

Safe Software for Autonomous Mobility With Modern C++
Using modern C++ is frowned upon by many working in safety critical and real time systems.
We show our efforts to bring modern C++ into this new field on the example of a safe real time robotics framework for autonomous driving tightly integrated into ROS 2.

This talk introduces the main challenges and how we solved them:
* Avoiding memory allocations during exception handling.
* Memory pools for standard containers and best practices to avoid memory fragmentation.
* Additions to the thread support library to make it suitable for real time applications.

Speakers
avatar for Andreas Pasternak

Andreas Pasternak

Technical Lead, Apex.AI
Working on algorithmic support C++ framework for autonomous driving vehicles.


Thursday September 19, 2019 15:15 - 15:45
Crest 4/5

15:15

Infiltrating a Code Base: Moving Toward a Better C
“If you’re arguing, you’re losing”, or so said Dan Saks when discussing migrating legacy C codebases to C++. Many of the arguments that you hear against using C++ deal with the level of abstraction provided by objects and the STL (or templates, in general). However, there are many standard practices in C codebases that can benefit from some C++ tactics without having to introduce any of those features of the language. In this talk, we will look at some history of C to understand the viewpoint of C programmers. Then we will see methods to both improve both the reliability and maintainability of the codebase, while not alienating the existing developers. Along with these techniques, we will use compiler output that can be used to prove that we aren’t introducing any new overhead. Armed with these tools, we can move this legacy code and your team forward in preparation for the day where the file is renamed from C to CPP.

Speakers
avatar for Brian Ruth

Brian Ruth

Senior Software Engineer, Garmin, Ltd
Brian has been programming in C++ for 20+ years; working for both small and large companies on a wide variety of projects and technologies. For over a decade he worked with neuroscience researchers and created high speed acquisition, analysis and visualization software. He is currently... Read More →


Thursday September 19, 2019 15:15 - 15:45
Crest 3

15:15

The Art of Breaking Things: a new tool for fighting against Hyrum’s law in the new world of concept-driven design
The oft-cited Hyrum's law states that "with a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody." With the introduction of concepts as a language feature in C++20, generic programming is expected to make its way into more layers of software stacks than ever before. Employing concept-driven design across multiple layers of a software stack affords a number of new and innovative approaches to battling Hyrum's law. As more and more libraries are tested and deployed with contracts expressed through generic concepts, a new art of providing models of those concepts that stress the boundaries of the contracts they represent is emerging. Put simply, it's more important than ever to break things early and often.

Unlike interfaces based on concrete types and abstractions, where a single interface is generally tied to a single implementation (thus leading to leaking of implementation details into an implicit interface), concept-driven interface designs can more naturally provide multiple implementations that model a concept, and thus constrain the implicit interface to the overlap of those implementations. Designing and implementing sets of types that minimize this intersection is a crucial skill that should be in every advanced developer's toolbox, and yet it is rare to hear this "art of breaking things" addressed explicitly.

In this talk, we will examine the implementation of several common interfaces that can be expressed with concept-driven design, including ranges, futures, strings, spans, and executors. Within a typical set of contracts for these concept interfaces, we will work through the design and implementation of models for these concepts focused on breaking user code that unsafely widens these contracts. We will further motivate these examples with some real-world scenarios and weigh the importance of breaking things against other factors in generic library design. Finally, we will discuss how the ability to break things should feed back into the concept design process itself, leading to more robust and less implicit interfaces throughout your software stack.

Speakers
avatar for David Hollman

David Hollman

Senior Member of Technical Staff, Sandia National Labs
Dr. David S. Hollman has been involved in the ISO-C++ standard committee since 2016. He has been a part of a number of different papers in that time, including `mdspan`, `atomic_ref`, and—most prominently—executors and futures. Since finishing his Ph.D. in computational quantum... Read More →


Thursday September 19, 2019 15:15 - 15:45
Summit 8/9

15:15

Back to Basics: Smart Pointers
Smart pointers are one of the key features of modern C++. We'll cover the two fundamental strategies used by the standard smart pointers: unique ownership transfer and reference-counting. We'll show how shared_ptr uses control blocks to implement reference-counting of arbitrary objects, and how to use weak_ptr in conjunction with shared_ptr. We'll explain the convenience functions make_shared and make_unique, and demonstrate how they are more than just conveniences. Finally, we'll motivate, implement, and demystify the curiously recurring template enable_shared_from_this<T>.

Attendees will leave this session with a clear understanding of how C++11's smart pointers work under the hood.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Arthur O'Dwyer is the author of "Colossal Cave: The Board Game," "Mastering the C++17 STL" (the book), and "The STL From Scratch" (the training course). He runs professional C++ training courses, is occasionally active on the C++ Standards Committee, and has a blog mostly about C... Read More →


Thursday September 19, 2019 15:15 - 16:15
Aurora A

15:15

From STL to Ranges: Using Ranges Effectively
This course provides a survey of C++20 ranges and their application. Ranges are the largest revamp of the Standard Template Library (STL) in 20 years and will impact daily C++ programming dramatically. Some of the changes seem minor, but full utilization of ranges is much more transformational to coding practice.

The tutorial goes beyond the basics to explore what's behind the library. For example, understand the key differences between algorithms and views and when to apply them.  Chock full of example code this tutorial will bootstrap programmer's usage of std::ranges.

Speakers
avatar for Jeff Garland

Jeff Garland

CrystalClear Software
Jeff Garland has worked on many large-scale, distributed software projects over the past 25+ years. The systems span many different domains including telephone switching, industrial process control, satellite ground control, ip-based communications, and financial systems. He has written... Read More →


Thursday September 19, 2019 15:15 - 16:15
Aurora C

15:15

How C++ Beats All Other Languages at Card Games: Using Integers as Arrays of Bitfields a.k.a. SWAR Techniques
Many applications, including card games, may achieve large speedups by treating 64-bit integers as arrays of bitfields and processing all of their elements with simple processor instructions. This is called "SWAR", which stands for "SIMD Within A Register", or using bit-wise and integer instructions for multiple bitfields within a processor register.

SWAR techniques are described mostly in the HAKMEM memos and the "Hacker's Delight" book. However, in the absence of real, illustrative applications, it is difficult to learn how to use them and capitalize on their potential for large speedups. For example, normal 52-card deck games have 13 ranks, representing each group of four cards of a rank as a bitfield element in a SWAR vector we can achieve, compared to the serial equivalent, 13x speedups for things such as detecting four-of-a-kind. Here we will show many practical uses of SWAR techniques that were organized as a SIMD (Single Instruction Multiple Data) library to help make an artificial intelligence engine for card games.

We will talk about:
1. known and potentially original SWAR techniques,
2. how we packaged them in a library used to calculate "equities" of hands of cards in the game of Poker,
3. the benchmarks that prove this library performs better than other popular solutions

And we will focus throughout on how C++ 11 and more modern help: Instead of having to do lots of very error-prone busy work as in other languages, C++ has zero-performance-cost Generic Programming abstractions that allow us to get clean and easy to reason about code while keeping top performance; also, there are many techniques that accomplish the same things, but have different cost profiles that can be evaluated with benchmarking and the powers of Generic Programming also make it very easy to reconfigure the choices to incorporate benchmark knowledge.

Speakers
avatar for Eduardo Madrid

Eduardo Madrid

Software Engineer Lead, Snapchat
Eduardo has been working for many years on financial technologies, automated trading in particular, and other areas where performance challenges can be solved in C++. He contributes to open source projects and teaches advanced courses on Software Engineering with emphasis in Generic... Read More →


Thursday September 19, 2019 15:15 - 16:15
Summit 4/5

15:50

Generators, Coroutines and Other Brain Unrolling Sweetness
C++20 brings us coroutines and with them the power to create generators, iterables and ranges.
We'll see how coroutines allow for cleaner, more readable, code, easier abstraction and genericity, composition and avoiding callbacks and inversion of control.

We'll discuss the pains of writing iterator types with distributed internal state and old-school co-routines. Then we'll look at C++20 coroutines and how easy they are to write clean linear code. Coroutines prevent inversion of control and reduce callback hell. We'll see how they compose and play with Ranges with examples from math, filtering, robotics and rasterization.

The talk will focus more on co_yield and less on co_await and async related usages.

Speakers
avatar for Adi Shavit

Adi Shavit

Visioneer, Mr
Adi Shavit is an entrepreneur, speaker, independent consultant, experienced software architect and a computer vision, image processing, and machine learning expert with an emphasis on real-time applications. He specializes in building cross-platform, high-performance software combined... Read More →


Thursday September 19, 2019 15:50 - 16:20
Aurora D

15:50

Mesh: Automatically Compacting Your C++ Application's Memory
Programs written in C++ can suffer from serious memory fragmentation, leading to low utilization of memory, degraded performance, and application failure due to memory exhaustion. This talk introduces Mesh, a plug-in replacement for malloc that, for the first time, eliminates fragmentation in unmodified C++ applications through compaction. A key challenge is that, unlike in garbage-collected environments, the addresses of allocated objects in C++ are directly exposed to programmers, and applications may do things like stash addresses in integers, and store flags in the low bits of aligned addresses. This hostile environment makes it impossible to safely relocate objects, as the runtime cannot precisely locate and update pointers. Mesh combines novel randomized algorithms with widely-supported virtual memory operations to provably reduce fragmentation, breaking long-established worst-case bounds on memory efficiency with high probability. Mesh generally matches the runtime performance of state-of-the art memory allocators while reducing memory consumption and eliminating pathological cases; in particular, Mesh reduces the memory of consumption of Firefox by 16% and Redis by 39%. There are efforts underway to incorporate Mesh's approach to eliminate fragmentation into existing allocators like tcmalloc and jemalloc; Mesh itself is available at https://github.com/plasma-umass/Mesh, and it can be used just by setting an environment variable.

Speakers
avatar for Emery Berger

Emery Berger

Professor, Univ. of Massachusetts Amherst
Emery Berger is a Professor in the College of Information and Computer Sciences at the University of Massachusetts Amherst, the flagship campus of the UMass system. He graduated with a Ph.D. in Computer Science from the University of Texas at Austin in 2002. Professor Berger has been... Read More →


Thursday September 19, 2019 15:50 - 16:20
Crest 3
  • Level Intermediate, Advanced, Expert
  • Tags memory

15:50

The Design of the C++ Runtime for AWS Lambda
AWS Lambda allows developers to write their code and run it without worrying about provisioning machines and/or scaling them. AWS Lambda's billing model is based on how much memory your code consumes and how fast it completes. That makes C++ an ideal candidate for AWS Lambda.

However, C++ programs are compiled with many different compilers and linked against different versions the standard library. This poses a challenge for deployment when the target environment is not something under your control. It can also be too restrictive to require users to build their programs from scratch in that environment and that environment only.

In this talk, I will walk you through the problems we faced and the techniques we used to solve them in order to make running C++ on AWS Lambda a reality.

Speakers
MM

Marco Magdy

Senior Software Engineer, Amazon
Marco is a senior software engineer at AWS who works full time on developing & maintaining the C++ SDK for AWS. He is also the author of the C++ runtime for AWS Lambda.


Thursday September 19, 2019 15:50 - 16:20
Crest 4/5

15:50

Behind the Scenes of a C++ Build System
Everyone has an opinion on what build systems should do but there are surprisingly few who have an understanding of how they do it. In this talk we shall look behind the curtain and examine what does it actually take to create a modern build system and how they go about their business of turning source code into either compiler errors or executables.

On this journey we shall learn about the wonders of supporting 10+ different platforms and toolchains, dependency management, the awesomeness (both ironically and not) of shared libraries, compiler bugs and the interesting requirements on tools used at the lowest layers of a modern operating system. Using the increasingly popular Meson build system we shall examine real world design choices and tradeoffs and how they affect the final end user development experience. Performance optimization is also examined by looking at how you can efficiently scale program compilation both up to a compilation cluster and down to something like a Raspberry Pi.

Armed with all this knowledge we should finally be able to answer the question of why almost all build systems have suffered from poor usability and maybe, just maybe, find a proper solution for the build and dependency problem.

Speakers
JP

Jussi Pakkanen

Consultant, Rakettitiede oy
Jussi Pakkanen is the creator and project lead of the Meson build system. He is currently working as a consultant. He has experience in many different fields of computing ranging from slot machines to mail sorting, computer security, Linux desktop development and gaming. His free... Read More →


Thursday September 19, 2019 15:50 - 16:20
Summit 8/9

16:00

Speaker Portraits
Jonathan Phillips will be taking portrait photos of speakers.

Thursday September 19, 2019 16:00 - 17:00
Conference Room A

16:45

Back to Basics: Virtual Dispatch and its Alternatives
Code efficiency is one of the strongest features of modern C++, therefore broadly used in industries with a need for high performance, such as Real-Time or Embedded Systems.

In this talk, we will go through the search for high run-time efficiency using the dispatch mechanism.

We will start by providing tools for understanding and estimating run-time performance cost.

Next, we'll analyze a test case, and dive into some of the most fundamental components of the language such as inheritance, and templates.

We will continue by introducing implementations which produce high run-time efficiency code such as CRTP, std::variant and visitor, and use them to maximize performance.

Finally, we will do benchmarking and draw conclusions, and try to answer the question -
How can we use C++ ideally for achieving high-performance efficiency?

Speakers
avatar for Inbal Levi

Inbal Levi

Software engineer, SolarEdge
Inbal Levi is a C++ enthusiastic, embedded software engineer with a passion for high performance.


Thursday September 19, 2019 16:45 - 17:45
Aurora C

16:45

Solve Hard Problems Quickly Using SAT Solvers
What do robot motion planning, hardware design and verification, software
verification, model checking, cryptanalysis and bioinformatics have
in common? All of them often rely on SAT solvers to do the heavy lifting.
This talk will show you how to solve your own problems with SAT solvers
and leverage the decades of research that has gone into making modern SAT
solvers fast.

We will take a look at what the boolean satisfiability (SAT) problem means,
and what kind of problems can be converted into SAT. We will then go over
examples to show how real-world problems are expressed as SAT, starting
with simple examples and ending with a real world problem my employer has
been working on the last few years.

We will also cover why SAT solvers should be especially interesting to C++
developers, how to effectively drive a SAT solver using C++, how we can
transfer domain-specific knowledge to the solver and which factors
correlate with being able to solve problems quickly.

Speakers
avatar for Martin Hořeňovský

Martin Hořeňovský

Researcher, Locksley.CZ
Martin Hořeňovský is currently a researcher at Locksley.CZ, where he works on converting large master-key systems to SAT. He has taught modern C++ at Czech Technical University in Prague, and maintains Catch2, a popular C++ unit testing framework, in the little free time he has... Read More →


Thursday September 19, 2019 16:45 - 17:45
Summit 4/5

16:45

Path Tracing Three Ways: A Study of C++ Style
C++ is a multi-paradigm language allowing us as developers to pick and choose among a variety of styles: procedural, functional, object oriented, hybrids, and more. How does the style of programming we choose affect code clarity, testability, ease of changes, compile time and run-time performance?

In this talk Matt will show a toy path tracer project (a form of ray tracer) implemented in three different styles: traditional object oriented, functional, and data-oriented design. He'll then compare and contrast his experiences developing in each case, showing how often the compiler is able to reduce each style to similar performing code. There's certain to be some surprises - and of course some Compiler Explorer usage!

Speakers
avatar for Matt Godbolt

Matt Godbolt

Development Engineer, Aquatic Capital Management, LLC
Matt Godbolt is the creator of the Compiler Explorer website. He is passionate about writing efficient code. He has previously worked at a trading firm, on mobile apps at Google, run his own C++ tools company and spent more than a decade making console games. When he's not hacking... Read More →


Thursday September 19, 2019 16:45 - 17:45
Aurora A

16:45

Reducing Template Compilation Overhead, Using Features from C++11, 14, 17, and 20.
At their best, new C++ standards offer simpler, clearer, and faster-to-compile ways to write your code. But many information sources, for example Andrei Alexandrescu’s Modern C++ Design, haven’t been updated.

More importantly, template metaprogramming is not something we generally seek to optimize because a good compiler handles it well, and problems generally only show up in the form of long compile times.

In this presentation, I'll describe techniques you can use to simplify, clarify, and improve the compile speed, of your code, including:
* Using C++17 "if constexpr"
* Using C++11 variadic function / template arguments (often without needing recursion!)
* Using decltype on auto-return functions in order to compute types in a more readable way.
* Using C++20 constraints rather than std::enable_if

Speakers
avatar for Jorg Brown

Jorg Brown

Software Engineer, Google
Jorg Brown started coding in the days when getting a home computer often meant assembling it yourself, and while he appreciates high-level languages like C++, he also misses those early days, when computers were simple enough that a programmer could actually fully understand a machine... Read More →


Thursday September 19, 2019 16:45 - 17:45
Summit 8/9

16:45

Floating-Point charconv: Making Your Code 10x Faster With C++17's Final Boss
Floating-point numbers are ancient, mysterious, and terrifying. Over the past 30 years, the C and C++ Standards have provided many functions for floating-point/string conversions, such as C's strtof(), strtod(), and printf() %a %e %f %g, and C++'s iostreams, stof(), stod(), and to_string(). Despite this history, floating-point is far from a solved problem - these functions have ranged from annoyingly to egregiously slow, and application developers and library maintainers alike have found it exceedingly difficult to understand floating-point behavior.

This session will present new and wondrous developments in the area of floating-point conversions. If your serialization code is bottlenecked by floating-point printing, this will accelerate your code by roughly 3x to 30x (yes, times, not percent). You can also improve the human-readability of your output. Along the way, this session will cover the basics of floating-point representations, dispelling common myths like fuzziness and non-determinism.

Specifically, C++17 added 3 pages of Standardese describing the charconv header and its functions from_chars() and to_chars(). This feature has required an unexpectedly large amount of implementation work, taking over a dev-year for MSVC and becoming the last C++17 library feature to ship. Coincidentally, Ulf Adams at Google developed a novel algorithm named Ryu, which is responsible for the amazing speed of to_chars(). This session will focus on how to use charconv and how to understand its many supported formats, with a brief overview of Ryu's techniques.

Speakers
avatar for Stephan T. Lavavej

Stephan T. Lavavej

Principal Software Engineer, Microsoft
Stephan T. Lavavej is a Principal Software Engineer at Microsoft, maintaining Visual C++'s implementation of the C++ Standard Library since 2007. He also designed a couple of C++14 features: make_unique and the transparent operator functors. He likes his initials (which people can... Read More →


Thursday September 19, 2019 16:45 - 17:45
Aurora D

16:45

test_resource: The pmr Detective
This session will provide an introduction to pmr::test_resource, which supports testing memory allocation related behavior on a per-object basis. pmr::test_resource is a C++17 memory resource designed for testing that can be plugged into any test framework. It is the modernized version of the bslma::TestAllocator used in production for over two decades at Bloomberg, where it has helped to expose a variety of bugs, such as memory leaks, overruns, multiple deletes, exception-safety guarantee failures etc.

This presentation will show the use of test_resource in detecting errors related to memory allocation. We walk through code to demonstrate several bugs and show how they misbehave, how we diagnose them, and a reasonable fix. pmr::test_resource is being proposed for the Library Fundamentals 3 TS and full source code for test_resource, bslma::TestAllocator and the examples is available on GitHub.

Speakers
avatar for Attila Fehér

Attila Fehér

Senior software engineer, Bloomberg LP
Working with C++. Original proposer of the C++11 alignment features.


Thursday September 19, 2019 16:45 - 17:45
Summit 6/7

16:45

C++ Class Natures in Their Canonical Form and How to Find Them
While working on guidelines for safety critical systems the author discovered that looking at the required special member functions and kind of member variables one can clearly distinguish several C++ class type natures. For example, there exist empty types, such as traits, or value types, such as std::string. But also types that manage resources, such as scope guards or unique managers, can be distinguished. A last area are object-oriented polymorphic base classes forming a separate nature. This categorization has direct influence on the applicability of the "Rule of Zero", "Rule of Five", or the author's "Rule of DesDeMovA". The nature of member variables influence the nature of the class embedding them.

This talk maps the landscape of class/type natures and how they influence directly or indirectly the way you specify or the compiler provides copy or move operations and a destructor. With that information you will get concrete guidelines to provide canonical class types more consciously with the least amount of code scaffolding. It also helps you to avoid creating easy to misuse types and gives guidance to encapsulate and hide "dirty tricks" that you might still need or want.

Speakers
avatar for Peter Sommerlad

Peter Sommerlad

Professor, IFS Institute for Software
Prof. Peter Sommerlad is director of IFS Institute for Software at FHO/HSR Rapperswil, Switzerland. Peter is co-author of the books POSA Vol.1 and Security Patterns and contributed to "97 things every programmer should know". His goal is to make software simpler and safer by Decremental... Read More →


Thursday September 19, 2019 16:45 - 17:45
Crest 3

16:45

In-place Construction: the Routine Complexities of Efficiency
Efficient C++ has always been about minimizing copies. This practically-focused
talk is about how to do that when working with move semantics, perfect
forwarding and STL containers, or non-STL containers that present similar
interfaces.

In-place construction is an easily stated goal, but can be really fiddly to get
right, especially given the foibles of various container interfaces. We'll talk
about copy elision; when to use emplace, insert, or other methods; vectors,
maps, optionals, variants; and how things change from C++11 through C++20.
Attendees will learn why in-place construction is beneficial and exactly how to
achieve optimal efficiency with the various standard container types.

Speakers
BD

Ben Deane

Ben was a game programmer for over 20 years, working in C++ since the late 90s for companies like EA and Blizzard. In 2018 he left the games industry to join Quantlab, an automated trading firm, where he writes modern, well-performing C++. He likes to play with algorithms, and to... Read More →


Thursday September 19, 2019 16:45 - 17:45
Crest 4/5

18:30

Meet the Speakers Dinner
The Meet the Speakers Banquet is open to all attendees. Invitation is included with "Full" conference registration and is also available as a separate, stand-alone registration.

A Main Program speakers are invited by the conference, so this is your opportunity to meet and discuss with speakers in a relaxed, informal environment.

[CppCon 2019 Registration]

Thursday September 19, 2019 18:30 - 20:15
Social Hall (Aurora B)

20:30

CppCon 2020 Kick-off Meeting
The planning committee for next year's conference starts now. Join us if you'd like to provide suggestions or otherwise pitch in.

Moderators
avatar for Bob Steagall

Bob Steagall

Chief Cook and Bottle Washer, KEWB Computing
I've been working in C++ since discovering the second edition of The C++ Programming Language in a college bookstore in 1992. The majority of my career has been spent in medical imaging, where I led teams building applications for functional MRI and CT-based cardiac visualization... Read More →

Thursday September 19, 2019 20:30 - 22:00
Crest 3

20:30

Lightning Talks
The adventure continues — come for bite size talks you'll want more of!

Moderators
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.

Thursday September 19, 2019 20:30 - 22:00
Aurora A
 
Friday, September 20
 

08:00

Cpp.Chat - Live Episode!
Join us for a live recording of Cpp.Chat with Jon and Phil.

Speakers
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon has been programming in C++ for almost three decades and does onsite training for teams that want to up their C++ game.Jon chairs C++Now, CppCon, the C++ Track of the Silicon Valley Code Camp, and the Boost Steering Committee. He also serves on the board of directors for... Read More →
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.


Friday September 20, 2019 08:00 - 08:45
Summit 4/5

09:00

Back to Basics: Exception Handling and Exception Safety
Exception handling (EH) is a powerful tool for dealing with errors. Using EH effectively can produce code that is simpler, more readable, and more robust than you can get with alternative mechanisms. In this session, we will explain the purpose of EH by contrasting it with the most common alternative, function return codes. We will show you the preferred techniques for throwing and catching exceptions, including which types of objects to throw, when to throw them, and how to catch them. We will describe the different levels of exception safety guarantees and demonstrate techniques like RAII that will help you write functions that provide those guarantees. We will illustrate how to write exception-neutral code that allows you to use EH without creating additional failure points.

Speakers
avatar for Ben Saks

Ben Saks

Chief Engineer, Saks & Associates


Friday September 20, 2019 09:00 - 10:00
Aurora D

09:00

Higher-order functions in Modern C++: existing techniques and `function_ref`
Most modern languages treat functions as first-class citizens, and Modern C++ is no different. The introduction of lambda expressions and utilities such as `std::function` enable countless functional programming patterns that can increase the flexibility and safety of APIs, and help reduce code repetition on the implementation side.

In this talk we're going to see examples of how higher-order functions can be used in practice to increase the quality of production code and the productivity of developers, focusing on pragmatic use cases that can be integrated in an existing codebase instead of fully functional patterns.

A new abstraction proposed to the Standard Library for C++20, `function_ref`, will also be covered and compared to existing techniques for the implementation of higher-order functions.

`function_ref` is a lightweight wrapper over any `Callable` with a given signature that is easy for the compiler to optimize and inline. This presentation will go over the specification and implementation of `function_ref`, covering potential future extensions and possible pitfalls.

Speakers
avatar for Vittorio Romeo

Vittorio Romeo

Software Engineer, Bloomberg
Vittorio Romeo (B.Sc. Computer Science) has been a Software Engineer at Bloomberg for more than 3 years, working on mission-critical company C++ infrastructure and providing Modern C++ training to hundreds of fellow employees.He began programming around the age of 8 and quickly became... Read More →


Friday September 20, 2019 09:00 - 10:00
Crest 4/5

09:00

What a View! Building Your Own (Lazy) Range Adaptors (part 1 of 2)
With their addition to C++20, ranges -- a revamped STL -- are going to send shockwaves through the way in which we design our software. The work from ranges gives us three broad things in C++20: redefined algorithms, concepts to assist in these algorithm definitions, and a handful of range adaptors, which are an abstraction over iterators for convenient program composition.

As Alex Stepanov and Sean Parent have said, the algorithms from the STL are only a sample of the algorithms that exist, and you're able to write your own. Range adaptors are no different: just because the adaptor you need isn't in C++20, doesn't mean that you can't write (or propose) it.

Using custom range adaptors can help you express your intentions in a much clearer manner. We'll spend some time implementing a range adaptor that isn't in the pipeline for C++20, starting from a motivating use-case, then move to how we implement the range adaptor -- including design considerations -- and finally, we'll write up a few tests to wrap everything up.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Engineer, Codeplay Software
Christopher Di Bella is a Staff Software Engineer for Codeplay’s ComputeCpp Runtime Technology. He is a strong proponent for generic programming in C++ and C++ education. Chris was previously a software developer for Nasdaq, and a tutor for UNSW Australia’s COMP6771 Advanced C... Read More →


Friday September 20, 2019 09:00 - 10:00
Aurora C

09:00

Faster Compile Times and Better Performance: Bringing Just-in-Time Compilation to C++
Do your C++ applications take longer to compiler than you would like? Do you ever instantiate a template with different arguments, not because you necessarily need all of the different types, but because you will not know until the program runs which of the types are needed? This presentation will describe how C++ can be enhanced with programmer-controller just-in-time (JIT) compilation, discuss different ways that the language can be extended to support this capability, and how JIT compilation can provide faster compile times along with increased performance. I'll describe ClangJIT, an enhancement to Clang implementing JIT-compilation extensions, and show some application performance data.

JIT-compilation technology has been around for a long time, and is widely used in many different programming languages. Can we leverage JIT compilation in C++ consistent with C++'s philosophical underpinnings while addressing major challenges with C++ programming today? Come and find out!

Speakers
avatar for Hal Finkel

Hal Finkel

Argonne National Laboratory


Friday September 20, 2019 09:00 - 10:00
Summit 4/5

09:00

Releasing C++ Toolchains Weekly in a 'Live at Head' World
Frequent toolchain updates allow C++ developers at Google to take advantage of the latest and greatest optimizations, tooling updates, bug fixes, and security mitigations. They also allow our compiler developers to work directly upstream without needing to maintain internal patches or forks, and still make our changes available internally in a timely way.

In this presentation, we talk about the steps we take to stay up to date and (usually) release a compiler every week, including:
- How we test for correctness and performance
- Tools we use to triage problems
- Various issues that regularly come up, and how we deal with them

Speakers
avatar for Jorge Gorbe Moya

Jorge Gorbe Moya

Software Engineer, Google
Jorge is a Software Engineer in the C++ Production Toolchain team at Google. Former game developer, he enjoys learning about all things computing, making music (with or without a computer), playing basketball, and crafting ridiculously small executable files that produce cool visuals... Read More →
avatar for Jordan Rupprecht

Jordan Rupprecht

Software Engineer, Google
Jordan works on the C++ Production Toolchain Team and Google, making sure that we can upgrade the compiler without breaking billions of lines of code. He also contributes to the LLVM project, especially on the binary utilities.


Friday September 20, 2019 09:00 - 10:00
Crest 3

09:00

Naming is Hard: Let's Do Better
C++ developers are famously bad at naming: our idioms, guidelines, and lore are rich in examples of terrible names. For example, consider RAII, which stands for scope bound resource management, or west const which perhaps should be const west, or all the samples that feature an object called x which is an instance of a class called X, and so on.

The good news is that naming well is a learned skill, and you can learn it, and start to name better right away. In this talk, I'll tell you why names matter, what benefits a good name can bring, and how to be better at naming. I'll discuss some categories of names and some common decisions within those categories. I'm not going to give you a set of rules to follow: this is about thinking and considering the meaning of the things you are naming. I will give you some questions to ask yourself and some structure that I use to help me to help those who read what I write.

I'll also address renaming things in existing (legacy) code, why and when to do it, and why getting it right the first time may not even be a realistic goal. You should be a lot more confident naming things after we spend this time together.

Speakers
avatar for Kate Gregory

Kate Gregory

Partner, Gregory Consulting
Kate Gregory has been using C++ since before Microsoft had a C++ compiler. She writes, mentors, codes, and leads projects, in both C++ and .NET, especially for Windows. Kate is a Microsoft Regional Director, a Visual C++ MVP, has written over a dozen books, and speaks at conferences... Read More →


Friday September 20, 2019 09:00 - 10:00
Aurora A

09:00

Some Programming Myths Revisited
We have been taught, or we ourselves have taught, things that we took for granted as being "good practice" in programming. Such things often stem from the "wisdom of the ancients" (although computer science being young as sciences come, some of the "ancients" are still among us and thriving today, and we're so lucky to have them!), and are in effect part of our "myths".

However, being as grounded in the science-that-there-was as these recommendations are, our ideas have evolved, so have our programming languages, and it can be interesting to revisit some of these taken-for-granted ideas.

In C++, particularly in what some call "modern C++", we find a language that is different enough from its forebears to make revisiting our "myths" interesting. How do such things as "goto considered harmful" or "only one return per function", for example, hold as "wisdom" with respect to modern C++? Do they still help us write better programs or should be rethink them under the light of modern languages and practice?

The aim of this talk is to examine what some commonly heard recommendations or advices with respect to programming practice mean in the context of "modern" C++. We will take a small set of such advices, present them in context, show how well (or how badly) they suit today's C++, and try to rephrase them if this seems advantageous.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 25 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005, he’s... Read More →


Friday September 20, 2019 09:00 - 10:00
Summit 8/9

10:30

Back to Basics: Lambdas from Scratch
Lambdas — even C++14's mysterious "generic lambdas" — are just syntactic sugar atop constructs that are perfectly understandable when approached from the right direction.

We'll start with the implementation of C-style functions, then move to overloading, function templates, non-static member functions, C++11 lambdas, and then demystify C++14's generic lambdas. We'll cover the minor changes to lambdas in C++17, such as the ability to capture `*this` by value, and indicate some of the minor changes coming in C++2a. Finally, we'll detour into the implementations of std::function and std::bind to show how they're different from lambdas.

Attendees will leave this session with a clear understanding of how C++ — a language without dynamic typing or garbage collection — can nevertheless support efficient lambda closures.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Arthur O'Dwyer is the author of "Colossal Cave: The Board Game," "Mastering the C++17 STL" (the book), and "The STL From Scratch" (the training course). He runs professional C++ training courses, is occasionally active on the C++ Standards Committee, and has a blog mostly about C... Read More →


Friday September 20, 2019 10:30 - 11:30
Aurora D

10:30

std::midpoint? How Hard Could it Be?
The standards committee adopted "P0811: Well-behaved interpolation for numbers and pointers" for C++20.
It includes a new library call `std::midpoint`.
The paper says "The simple problem of computing a value between two other values is surprisingly subtle in general."

In this talk, I will explore this simple call, provide a history of the development in libc++, and show some of the pitfalls.
Undefined behavior will rear its ugly head, along with numeric representations, and the arcane C promotion rules.

Along the way, we'll talk about testing, and why writing extensive tests helps everyone.

Speakers
avatar for Marshall Clow

Marshall Clow

Engineer, C++ Alliance
Marshall has been programming professionally for 35 yearsHe is the author of Boost.Algorithm, and has been a contributor to Boost for more than 15 years. He is the chairman of the Library working group of the C++ standard committee. He is the lead developer for libc++, the C++ standard... Read More →


Friday September 20, 2019 10:30 - 11:30
Crest 3

10:30

What a View! Building Your Own (Lazy) Range Adaptors (part 2 of 2)
With their addition to C++20, ranges -- a revamped STL -- are going to send shockwaves through the way in which we design our software. The work from ranges gives us three broad things in C++20: redefined algorithms, concepts to assist in these algorithm definitions, and a handful of range adaptors, which are an abstraction over iterators for convenient program composition.

As Alex Stepanov and Sean Parent have said, the algorithms from the STL are only a sample of the algorithms that exist, and you're able to write your own. Range adaptors are no different: just because the adaptor you need isn't in C++20, doesn't mean that you can't write (or propose) it.

Using custom range adaptors can help you express your intentions in a much clearer manner. We'll spend some time implementing a range adaptor that isn't in the pipeline for C++20, starting from a motivating use-case, then move to how we implement the range adaptor -- including design considerations -- and finally, we'll write up a few tests to wrap everything up.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Engineer, Codeplay Software
Christopher Di Bella is a Staff Software Engineer for Codeplay’s ComputeCpp Runtime Technology. He is a strong proponent for generic programming in C++ and C++ education. Chris was previously a software developer for Nasdaq, and a tutor for UNSW Australia’s COMP6771 Advanced C... Read More →


Friday September 20, 2019 10:30 - 11:30
Aurora C

10:30

Deprecating volatile
Dealing with volatile in C and C++ is problematic in large parts because what the Standards say isn’t very intuitive and often error-prone. Indeed, volatile isn’t specified normatively, has relatively obscure uses, and is surrounded by myths and legends. This is especially troublesome because volatile is most used to interact with hardware and perform other tricky operations in low-level code. We’ve determined that the languages should be improved and are actively working in that direction: deprecate the dubious and obviously broken uses of volatile in both languages though the C and C++ Standards Committees, standardize replacements which are less error-prone, create advanced diagnostics to help developers write better code. Our ultimate goal: deprecate what remains of volatile.

This talks first helps developers understand volatile because it’s often misunderstood. With that understanding, developers are then walked through the deprecation and replacement plan we’ve set out.

Speakers
avatar for JF Bastien

JF Bastien

Compiler engineer, Apple
JF is a compiler engineer. He leads C++ development at Apple.


Friday September 20, 2019 10:30 - 11:30
Summit 4/5

10:30

A Critical Look at the Coding Standards Landscape
The C and C++ programming languages are rife with spiky pits, hairpin curves, and loaded footguns, leading industries working with critical systems to embrace strict standards that aim to reduce the amount of damage that can be done with the awesome powers available to them when using these languages.

This session will briefly review what sorts of standards exist in the public today, leading into a serious critique of the more foolish and user-unfriendly aspects of these standards, and finally closing with an optimistic view of “the good parts” of the same.

Speakers
avatar for Michael Price

Michael Price

Senior Software Engineer, Synopsys, Inc.
Michael Price has developed and taught C++ for more than a decade and has been an active participant in WG21 since 2014, allocating most of his committee-time to EWG and the Reflection Study Group. He professes interest in making C++ "safer" to use through language and library design... Read More →


Friday September 20, 2019 10:30 - 11:30
Crest 4/5

10:30

Polymorphism != Virtual: Easy, Flexible Runtime Polymorphism Without Inheritance
Many C++ programmers, automatically think of virtual when they hear 'polymorphism'. However, there are better, more flexible ways to have polymorphism without using virtual. This talk will show how to achieve that.

We will start by looking at static and runtime polymorphism and discuss the advantages and disadvantages of each. Then we will take a look at 'virtual', looking at how it is implemented and the disadvantages of inheritance based polymorphism it entails.

With that background in place, we will demonstrate a technique using C++17 that combines some of the best features of static and runtime polymorphism without using inheritance while still being easy to use.

If you ever watched Sean Parent's talk "Inheritance Is The Base Class of Evil" and wanted an easier way to achieve what he achieved without the boilerplate, this talk is especially for you!

Speakers
avatar for John Bandela

John Bandela

SWE, Google LLC
I first started programming in C++ at age 14 in 1994 when I cajoled my parents into buying me Visual C++ 1.0 for my birthday. It took a while, but as I learned the language, I decided I really liked C++. I attended the University of Florida and obtained my undergraduate degree in... Read More →


Friday September 20, 2019 10:30 - 11:30
Aurora A

10:30

The Smart Pointers I Wish I Had
C++ offers two owning smart pointers, and a proposed non-owning smart pointer in the C++20 Library Fundamentals v2 Technical Specification. This talk will cover the kinds of semantics I think are important in a non-owning pointer, why I think more than one is desirable, and why the existing C++ owning smart pointers are sub-optimal for some use-cases. I will show how correct use of non-owning smart pointers can reduce memory lifetime issues, clarify code, and nearly eliminate incorrect ownership.

For asynchronous programming especially, the lifetime of observing pointers can be a source of significant and difficult to debug issues. I'll cover a mental model to use when writing code that helps focus on where lifetime issues might be likely, and where they will be unlikely.

Speakers
avatar for Matthew Fleming

Matthew Fleming

Software Engineer, Pure Storage
I've been working in systems software for almost 20 years now, mostly on virtual memory and filesystems, in both C and C++. I tend to find myself gravitating lower and lower in the stack, to code primitives, library helpers, and getting very close to the hardware.


Friday September 20, 2019 10:30 - 11:30
Summit 8/9

12:00

CppCon 2020 Planning Committee Work Session
This session is a follow-on to the kick-off meeting and is a chance for the planning committee to set up goals and milestones.

Moderators
avatar for Bob Steagall

Bob Steagall

Chief Cook and Bottle Washer, KEWB Computing
I've been working in C++ since discovering the second edition of The C++ Programming Language in a college bookstore in 1992. The majority of my career has been spent in medical imaging, where I led teams building applications for functional MRI and CT-based cardiac visualization... Read More →

Friday September 20, 2019 12:00 - 13:00
Conference Room B

12:00

Lightning Talks
The adventure continues — come for bite size talks you'll want more of!

Moderators
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.

Friday September 20, 2019 12:00 - 13:00
Summit 8/9

12:00

Open Content Sessions: TBA
Friday September 20, 2019 12:00 - 13:00
_N

12:00

6 Algorithmic Journeys with Concepts
Concepts are coming to C++, and they will change the way we develop libraries. Concepts are connecting our code with mathematical theories, and they are important for the development of long-living high-quality libraries.

In this talk, we will implement 6 generic algorithms and will describe type requirements for template parameters in terms of concepts. We will understand when we need to write type requirements and preconditions, and why they are different. We will compile the code with a compiler which has the support of concepts and will take a look at how it helps us to use code written in terms of concepts.

Speakers
avatar for Taras Shevchenko

Taras Shevchenko

Programmer, RailsReactor/Giphy
I am working on data-driven projects at Giphy. My work is mostly related to Natural Language Processing and deployment of ML models in production.


Friday September 20, 2019 12:00 - 13:00
Crest 4/5

12:00

Diversity and Inclusion in C++
Join us for a panel discussion on how we can improve diversity and inclusion in the C++ community.

The panelists will be sharing their experiences of the industry and having a conversation about how we can work together to make our communities and workplaces better. Questions will be taken from the audience to prompt discussion. Do you have questions about how you can help improve D&I in your spaces? Do you want to learn from other people's perspectives? Come along and bring lunch!

Moderators
avatar for Simon Brand

Simon Brand

C++ Developer Advocate, Microsoft
Simon is Microsoft’s C++ Developer Advocate. Their background is in compilers and debuggers for embedded accelerators, but they’re also interested in generic library design, metaprogramming, functional-style C++, undefined behaviour, and making our communities more welcoming and... Read More →
avatar for Guy Davidson

Guy Davidson

Principal Coding Manager, Creative Assembly

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Engineer, Codeplay Software
Christopher Di Bella is a Staff Software Engineer for Codeplay’s ComputeCpp Runtime Technology. He is a strong proponent for generic programming in C++ and C++ education. Chris was previously a software developer for Nasdaq, and a tutor for UNSW Australia’s COMP6771 Advanced C... Read More →
avatar for Satabdi Das

Satabdi Das

Senior Software Engineer, Mentor, A Siemens Business
Satabdi has been programming in C++ for more than 10 years. She works on a market leading emulator platform widely used by the chip design companies. She has previously worked on parsers and static analyzers. She is a big proponent of using modern C++ and likes to organize lunch and... Read More →
avatar for Allison Vacanti

Allison Vacanti

Senior R&D Engineer, Kitware
avatar for Duygu Cakmak

Duygu Cakmak

Senior AI Programmer, Creative Assembly


Friday September 20, 2019 12:00 - 13:00
Summit 4/5

13:30

Back to Basics: Type Erasure
This talk, based on Arthur's blog post ["What is Type Erasure?"](https://quuxplusone.github.io/blog/2019/03/18/what-is-type-erasure/), will explain the notion of type erasure as seen in standard library types such as std::function and std::any. We'll see how to build the most naive form of type erasure using heap allocation and virtual functions; then iteratively optimize that design to improve its performance. At the extreme, we'll see how C++2a std::function_ref achieves trivial copyability.

Attendees will leave this session confident in their ability to implement type-erased classes, such as std::function, from scratch.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Arthur O'Dwyer is the author of "Colossal Cave: The Board Game," "Mastering the C++17 STL" (the book), and "The STL From Scratch" (the training course). He runs professional C++ training courses, is occasionally active on the C++ Standards Committee, and has a blog mostly about C... Read More →


Friday September 20, 2019 13:30 - 14:30
Aurora A

13:30

From Functions to Lambdas: How Do C++ Callables _Really_ Work?
Functions have long been a mainstay of C++ flow of control. But there are several other entities which the language considers callable/invokable.

After a brief review of the salient properties of (a) function types (including the "abominable" ones!) and (b) the call operator, this talk will focus on the other entities to which the operator may be applied: pointers and references to functions and member functions, function objects, lambdas, and callbacks. We will pay special attention to the evolution of C++ lambdas, from their limited capabilities in C++11 through their various enhancements in C++14/17/20.

Along the way, we will also explore some of the standard library components that can be useful tools when programming with C++ callables.

Speakers
avatar for Walter E. Brown

Walter E. Brown

retired
With broad experience in industry, academia, consulting, and research, Dr. Walter E. Brown has been a C++ programmer for over thirty-five years, joining the C++ standards effort in 2000. Among numerous other contributions, he is responsible for introducing such now-standard C++ library... Read More →


Friday September 20, 2019 13:30 - 14:30
Summit 8/9

13:30

Modern Linux C++ debugging tools - under the covers
An overview of how some of the seemingly-magical modern Linux C++ tools actually work, so that you can get the most from them. C++ is a language and ecosystem that is unashamedly close to the metal, and to be an expert practitioner an understanding of compiler and OS fundamentals is essential, as is the case for debugging and profiling tools. The last decade has seen a ‘Cambrian explosion’ in tooling: Valgrind, perf, Address Sanitizer, rr, Live Recorder, Coverity and cppcheck have either arrived or become mainstream and even good-old GDB has come a long way. Greg gives an overview of how these amazing/magical tools are implemented, often exploiting a combination of compiler, OS and CPU features. Contains multiple demos and details on ptrace, DWARF debug info, how static analyzers work, record and replay systems - to help you to select the right tool for the job and then get the most out of it.

Speakers
avatar for Greg Law

Greg Law

CTO, Undo
Greg is co-founder and CEO at Undo. He is a programmer at heart, but likes to keep one foot in the software world and one in the business world. Greg finds it particularly rewarding to turn innovative software technology into real business development. Greg has over 20 years of experience... Read More →


Friday September 20, 2019 13:30 - 14:30
Aurora C

13:30

Faster Code Through Parallelism on CPUs and GPUs
Ever since multicore CPUs became widely available, programmers have been working to get compute-intensive code to run in parallel and take advantage of CPU hardware parallelism. This effort has continued in the era of general-purpose programming on GPUs. There are many approaches to parallelizing C++ code on multicore CPUs or GPUs. C++11 threads, OpenMP or OpenACC pragmas, CUDA, and class libraries like Kokkos are among the options. The C++17 standard introduced parallel versions of standard algorithms, offering an approach that is fully portable across C++17 implementations and supports both CPUs and GPUs. This talk will survey many of these approaches and compare them for ease of use, clarity of the code, and performance. It will include an overview of the current state of implementations of C++17 parallel algorithms in different compilers.

Speakers
avatar for David Olsen

David Olsen

Software engineer, NVIDIA


Friday September 20, 2019 13:30 - 14:30
Crest 4/5

13:30

Catch ⬆️: Unicode for C++23
It's 2019 and Unicode is still barely supported in both the C and C++ standards.

From the POSIX standard requiring a single-byte encoding by default, heavy limitations placed in codecvt facets in C++, and the utter lack of UTF8/16/32 multi-unit conversion functions by the standard, the programming languages that have shaped the face of development from operating systems, embedded devices and mobile applications has pushed forward a world that is incredibly unfriendly to a world of text beyond ASCII. Developers frequently roll their own solutions, and almost every major codebase -- from Chrome to Firefox to Qt to Copperspice and more -- all have their own variations of hand-crafted text processing. With no standard implementation in C++ and libraries split between various third party implementations and ICU, it is increasingly difficult and error-prone to handle what is the basic means of communication between people on the planet using C++, let alone the security holes found in hand-rolled libraries that do not carefully handle this tricky design space.

Small victories for character types that represent UTF8 exclusively, mandated UTF16 and UTF32 encoding for literals, and updating the Unicode Standard Reference in C++ have been accomplished by Study Group 16, who are the Unicode Arm of Standard C++. With the last of the foundational work to the C standards committee underway and participation from individuals at Mozilla, Google, Qt, Microsoft, Bloomberg, and Apple informing the design, Unicode in C++ is planned to be the biggest and best addition of first-class support for Unicode in C++.

This talk is going to be an overview of the problem space -- Text in C++ -- the people who are tackling the problem -- Study Group 16 -- and the first major libraries and works to be produced for handling encoding and normalization both flexibly and efficiently. It will talk about what we learned from its predecessors -- Boost.Text, text_view, ICU and Ogonek -- and what can be reasonably expected for C++23 and what aspirations SG16 has for the future. Come see the new face of a range-friendly encoding, decoding and normalization interfaces in C++.

Speakers
avatar for JeanHeyd Meneide

JeanHeyd Meneide

Student, Columbia Unviersity
JeanHeyd "ThePhD" is a student at Columbia University in New York. Most of his programming is for fun and as a hobby, even if his largest open-source contribution -- sol2 -- is used across many industries. He is currently working towards earning his own nickname, climbing the academic... Read More →


Friday September 20, 2019 13:30 - 14:30
Crest 3

13:30

Objects vs Values: Value Oriented Programming in an Object Oriented World
There is a battle going on inside your code. At least there is if it is anything like every other codebase I've ever worked on, seen, or heard about.

Your UI wants to show the user the *state* of the *objects* of the program, and allow the user to change the state of those objects, typically with direct interaction and feedback.

But hiding beneath that hustle and bustle, sometimes hiding too well, are simple, maybe even pure, math-like functions that take *values*, and return *values*. (Sometimes these functions camouflage themselves as methods that modify objects.) These functions can be complicated, but are simple in that you can understand them without understanding the entire system.

Unfortunately it is not usually clear how to make these Objects and these functional Values get along.

And in addition to that battle, there is the related battle of minimizing entanglement while managing real-world interrelationships.

How do we manage all these forces pulling us in these different directions?
(And how do we test it?)

Speakers
avatar for Tony Van Eerd

Tony Van Eerd

Ninja/Jedi/Tony, Christie Digital
Tony has been coding for well over 25 years, and maybe coding well for some of that. Lots of pixel++, UX, threading, etc. Previously at Inscriber, Adobe, BlackBerry, he now enables Painting with Light at Christie. He is on the C++ Committee. He is a Ninja and a Jedi.Follow @tvaneerd... Read More →


Friday September 20, 2019 13:30 - 14:30
Aurora D

13:30

Using C++20's Three-way Comparison <=>
C++20 adds the "spaceship operator" <=> for three-way comparison, fundamentally changing the way we implement comparison. But there are a lot more changes: Comparison categories will give more structure, and the new operator rewriting rules will massively reduce boilerplate. And like most C++ features, there are a couple of caveats we need to be aware of.

This talk will cover all the changes and give guidelines on how to use them. It will be very practical, answering questions like: How do I write a comparison operator for my classes? How do I write it for a generic container? How should I implement algorithms to leverage the three-way comparison? How do I handle all the types written without <=>?

Whether you are writing concrete applications or generic library code, you will have the necessary knowledge to apply the new features. And even if you cannot use C++20 in the foreseeable future, you will have a deeper understanding on proper comparison design.

Speakers
avatar for Jonathan Müller

Jonathan Müller

Student, RWTH Aachen University
Jonathan is a Computer Science graduate currently studying Physics. In his spare time he works on various C++ open source libraries for memory allocation, cache-friendly containers or parsing. He also blogs about C++ and library development at foonathan.net.


Friday September 20, 2019 13:30 - 14:30
Summit 4/5

14:45

What is C++
This Session is the Closing Keynote of the Back to Basics Track.

It’s been said that a programming language is a tool, and that different tools are designed to be good for different tasks. What is C++ good for? How is it a different sort of tool than other popular languages?

This talk will go into some depth on the design priorities of C++ (from the perspective of both language and library participants on the committee). We’ll dive into the ways that C++ distinguishes itself from other languages with surprisingly consistent (if unusual) design priorities. We’ll also point out ways that C++ is a wholly different tool than other languages, sometimes resulting in novel gotchas and failure modes.

If you’ve ever been interested in the raw material for a deep comparison on “Which language is better suited for a task”, this talk should provide a lot of material for understanding what C++ really is.

Speakers
avatar for Titus Winters

Titus Winters

C++ Codebase Cultivator, Google
Titus Winters has spent the past 6 years working on Google's core C++ libraries. He's particularly interested in issues of large scale software engineer and codebase maintenance: how do we keep a codebase of over 100M lines of code consistent and flexible for the next decade? Along... Read More →


Friday September 20, 2019 14:45 - 15:45
Aurora A

14:45

`unique_pseudofunction`: N overloads for the price of 1
This talk will present a class template that behaves almost like `unique_function`, but lacks one of its key restrictions: having just one overload of `operator()`.

`std::function` is an excellent tool for interface design. It encapsulates almost any object that is invocable the right way. `unique_function` is an even better tool. It can encapsulate some types that `std::function` can't - the ones that are move-only. Unfortunately, it is still invocable in just one way. You get one list of argument types and that's what you must pass.

What if the object you want to pass is invocable in more than one way? What if its `operator()` is a template that you will instantiate with N different types? What if it is a variadic template to which you will pass 0-N arguments? What if you use tag dispatch to do N different things?

If you want these things, as well as the type erasure offered by `std::function` and the move-only support offered by `unique_function`, then `unique_pseudofunction` is the class for you.

Follow the path I took towards realizing that `unique_pseudofunction` is the solution to most of my problems. We'll break this down into the following steps:
Building a simple non-generic `unique_function`
Making it generic
Adding a small buffer optimization
Extending it to support more than one overload of `operator()`

We will also look in close detail at several problems solved along the way, and several others that are still unsolved.

This talk involves small amounts of C++17 and large amounts of template metaprogramming, function references, and type erasure.

Speakers
FG

Filipp Gelman

Software Developer, Bloomberg LP
At Bloomberg LP since 2016, Filipp enjoys exploring the obscure, arcane, and esoteric corners of the C++ language. He is known among his coworkers for heavy use of templates, emphasis on compile time computation, and abusing language features for nefarious purposes.


Friday September 20, 2019 14:45 - 15:45
Crest 3

14:45

The Networking TS in Practice: Patterns for Real World Problems
Asynchronous programming is difficult. In spite of this it continues to supplant traditional synchronous programming. Operating systems provide asynchronous primitives. Boost.Asio and the Networking TS make these easily accessible. This makes asynchronous programming increasingly convenient and essential within the C++ ecosystem.

As with other difficult and complex areas of software engineering (such as parallel programming) asynchronous programming can be tamed through the application of patterns, practices, and rules. Design patterns are useful not because most programming problems are unique, but rather because they’re instantiations of archetypes addressed by a certain well known pattern. Once the pattern is known and its proper use can be identified seemingly complex problems become banal.

The talk introduces such patterns for use with the Networking TS and Boost.Asio. Several common problems encountered in real world use of Boost.Asio will be introduced and patterns to address them elegantly and within the internal structure of the Networking TS will be covered.

Speakers
avatar for Robert Leahy

Robert Leahy

Senior Software Engineer, MayStreet Inc.
Robert is a graduate of the University of Victoria where he specialized in graphics, gaming, and digital geometry processing. He spent 4.5 years in full stack web development before switching to develop infrastructure software for high frequency trading in early 2016. He remains focused... Read More →


Friday September 20, 2019 14:45 - 15:45
Crest 4/5

14:45

Great C++ is_trivial
There are many ways to initialize an object in C++, and much time spent analyzing the efficiency of the many options. We then think and rethink and overthink how to avoid copies and if a `std::move` would be more efficient in a certain case.

But if we understand what it means for a type to be trivial most of these questions now become meaningless. We can get all of the efficiency we could hope for, and probably more.

We will look at the trivial type traits, what they mean, and how they affect our code. Will will then examine the benefits of using trivial types and the impact on performance.

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http://cppbestpractices.com.I'm... Read More →


Friday September 20, 2019 14:45 - 15:45
Aurora C

14:45

Embrace Modern Technology: Using HTML 5 for GUI in C++
HTML 5 is likely the most widely used development stack in history. Because of this, there is an abundance of development tools and resources, and, more importantly, experts. HTML 5 is all about multimedia presentation. It's designed to allow any look and feel with ease. Modern browsers are among the most sophisticated pieces of software ever produced. It's hard to compete with what they achieve in terms of performance, security and stability.

HTML 5 is for web pages...

... or is it?

This talk introduces using HTML 5 as a graphical user interface framework for C++ native applications. In it we will explore several approaches and discuss their pros and cons. We will present several examples and demos which can help you start working on your own HTML 5 GUI right away.

Speakers
avatar for Borislav Stanimirov

Borislav Stanimirov

Software Engineer, ViewRay
Borislav has been a C++ programmer for 15 years. In the past 11 he has been programming video games. He has worked on C++ software for all kinds of platforms: desktops, mobile devices, servers, and embedded. His main interests are software architecture and design, and programming... Read More →


Friday September 20, 2019 14:45 - 15:45
Summit 4/5
  • Level Intermediate, Advanced
  • Tags GUI, HTML

14:45

C++20: The small things
C++20 comes with some big new language features: modules, coroutines, concepts, spaceship, and many new libraries. But apart from all those, C++20 also offers many small language improvements, making C++ more powerful and expressive, but also safer and more consistent.

This talk is an overview over all those smaller additions to the core language that will make your life easier. We will discuss much-needed improvements to existing facilities such as lambdas, CTAD, structured bindings, and initialisation, as well as brand-new language utilities that you may not yet have heard about!

Speakers
avatar for Timur Doumler

Timur Doumler

Timur Doumler is a C++ developer specialising in audio and music technology, active member of the ISO C++ committee, and part of the includecpp.org team. He is passionate about building communities, clean code, good tools, and the evolution of C++.


Friday September 20, 2019 14:45 - 15:45
Aurora D

14:45

Building Modules
C++20 brings us modules, which, for the first time in 40 years, change the fundamental way in which we build code. In this talk we will cover the different ways C++ code using modules can be built, explore some actual build systems supporting modules, and explain the build performance implications of each method. Modules provide isolation between components to a level never before available in C++, and allow us to share the work of parsing interfaces between compile steps. At their core both headers and modules are represented by a dependency graph. Conceptually, headers resolve this graph by duplicating, pruning, and flattening it for each translation unit. Modules can avoid this duplication, but if they do they pay for it with serialization and synchronization overhead. The end result of this trade-off depends on the shape of your build.

Speakers
avatar for Michael Spencer

Michael Spencer

Compiler Engineer, Apple


Friday September 20, 2019 14:45 - 15:45
Summit 8/9

16:15

De-fragmenting C++: Making Exceptions and RTTI More Affordable and Usable (“Simplifying C++” #6 of N)
A fundamental reason why C++ is successful and loved is its adherence to Stroustrup’s zero-overhead principle: You don’t pay for what you don’t use, and if you do use a feature you can’t reasonably code it better by hand. In the C++ language itself, there are only two features that violate the zero-overhead principle, exception handling and RTTI – and, unsurprisingly, these are also the only two C++ language features that every C++ compiler has switches to turn off and that are regularly discouraged or even banned. This matters because not using these features is the largest current cause of fragmentation of the C++ community into incompatible dialects, and the cause of recurring problems including type confusion security vulnerabilities arising from “didn’t down-cast using dynamic_cast because that would be too slow.” This talk is about ongoing long-term efforts to try to unify the community in this area, not by replacing exceptions and RTTI, but by doubling down: fully embracing exceptions and RTTI, and improving them so they can be zero-overhead too.

Speakers
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb is an author, designer of several Standard C++ features, and chair of the ISO C++ committee and the Standard C++ Foundation. His current interest is simplifying C++.


Friday September 20, 2019 16:15 - 18:00
Aurora A

20:30

Using HTML 5 for GUI in C++ Addendum
This session is for people interested in more after the talk Embrace Modern Technology: Using HTML 5 for GUI in C++. In it Borislav will help people run the demos from the talk on their own computers, answer more questions, and discuss ideas or concerns people might have if they want to use HTML 5 for GUI in their own C++ applications.

Speakers
avatar for Borislav Stanimirov

Borislav Stanimirov

Software Engineer, ViewRay
Borislav has been a C++ programmer for 15 years. In the past 11 he has been programming video games. He has worked on C++ software for all kinds of platforms: desktops, mobile devices, servers, and embedded. His main interests are software architecture and design, and programming... Read More →


Friday September 20, 2019 20:30 - 21:15
Crest 3
 
Saturday, September 21
 

09:00

Accelerated TDD: For More Productive C++
Accelerated TDD: For More Productive C++ is available as either a one-day or two-day training course with programming exercises taught by Phil Nash. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately after the conference). Lunch is included.

Prerequisites: Be comfortable with the basics of C++ - Being an expert not required; A laptop with a reasonably modern OS. A compiler capable of running C++11 (ideally gcc, clang or VC++) – don’t worry if it’s not what you use in your day job; A development environment you’re comfortable with. Phil can provide short term CLion licenses if you’d like (please let him know beforehand if possible); An open mind and motivation to find better ways of doing things.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.


Saturday September 21, 2019 09:00 - 17:00
Summit 7

09:00

Applied `constexpr`: Doing More Work At Compile Time
Applied `constexpr`: Doing More Work At Compile Time is a one-day training course with programming exercises taught by Jason Turner. It is offered from 9AM to 5PM on Saturday, September 21st (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http://cppbestpractices.com.I'm... Read More →


Saturday September 21, 2019 09:00 - 17:00
Summit 11

09:00

Building C++ Code with Cmake
Building C++ Code with CMake is a two-day training course with programming exercises taught by David Faure. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for David Faure

David Faure

Senior Software Engineer, KDAB
David is Senior Software Engineer and Trainer at KDAB as well as Managing Director of KDAB France. He has been developing with Qt since 1998 and contributing to Qt itself since Qt 4.0.For two years David has been giving KDAB trainings on Debugging and Profiling on Linux, a training... Read More →


Saturday September 21, 2019 09:00 - 17:00
Summit 10

09:00

Exploiting Modern C++: Building Highly-Dependable Software
Exploiting Modern C++: Building Highly-Dependable Software is a two-day training course with programming exercises taught by Matthew Butler. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Matthew Butler

Matthew Butler

Laurel Lye LLC
Matthew Butler has spent the last three decades as a systems architect and software engineer developing systems for network security, law enforcement and the military. He primarily works in signals intelligence using C, C++ and Modern C++ to build systems running on hardware platforms... Read More →


Saturday September 21, 2019 09:00 - 17:00
Summit 6

09:00

Generic Programming 2.0 with Concepts and Ranges
Generic Programming 2.0 with Concepts and Ranges is a two-day training course with programming exercises taught by Crhistopher Di Bella. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Engineer, Codeplay Software
Christopher Di Bella is a Staff Software Engineer for Codeplay’s ComputeCpp Runtime Technology. He is a strong proponent for generic programming in C++ and C++ education. Chris was previously a software developer for Nasdaq, and a tutor for UNSW Australia’s COMP6771 Advanced C... Read More →


Saturday September 21, 2019 09:00 - 17:00
Summit 8

09:00

Parallelism in Modern C++: From CPU to GPU
Parallelism in Modern C++: From CPU to GPU is a two-day training course with programming exercises taught by Gordon Brown and Michael Wong. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about
avatar for Gordon Brown

Gordon Brown

Principal Software Engineer, SYCL & C++, Codeplay Software
Gordon Brown is a principal software engineer at Codeplay Software specializing in heterogeneous programming models for C++. He has been involved in the standardization of the Khronos standard SYCL and the development of Codeplay's implementation of the standard from its inception... Read More →


Saturday September 21, 2019 09:00 - 17:00
Summit 9
 
Sunday, September 22
 

09:00

Accelerated TDD: For More Productive C++
Accelerated TDD: For More Productive C++ is available as either a one-day or two-day training course with programming exercises taught by Phil Nash. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately after the conference). Lunch is included.

Prerequisites: Be comfortable with the basics of C++ - Being an expert not required; A laptop with a reasonably modern OS. A compiler capable of running C++11 (ideally gcc, clang or VC++) – don’t worry if it’s not what you use in your day job; A development environment you’re comfortable with. Phil can provide short term CLion licenses if you’d like (please let him know beforehand if possible); An open mind and motivation to find better ways of doing things.

Course and instructor details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Phil Nash

Phil Nash

Developer Advocate, JetBrains
Developer Advocate at JetBrains, author of Catch/Catch2, co-host of cpp.chat, host of C++ London, chair and organiser of C++ on Sea.


Sunday September 22, 2019 09:00 - 17:00
Summit 7

09:00

Building C++ Code with Cmake
Building C++ Code with CMake is a two-day training course with programming exercises taught by David Faure. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for David Faure

David Faure

Senior Software Engineer, KDAB
David is Senior Software Engineer and Trainer at KDAB as well as Managing Director of KDAB France. He has been developing with Qt since 1998 and contributing to Qt itself since Qt 4.0.For two years David has been giving KDAB trainings on Debugging and Profiling on Linux, a training... Read More →


Sunday September 22, 2019 09:00 - 17:00
Summit 10

09:00

Exploiting Modern C++: Building Highly-Dependable Software
Exploiting Modern C++: Building Highly-Dependable Software is a two-day training course with programming exercises taught by Matthew Butler. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Matthew Butler

Matthew Butler

Laurel Lye LLC
Matthew Butler has spent the last three decades as a systems architect and software engineer developing systems for network security, law enforcement and the military. He primarily works in signals intelligence using C, C++ and Modern C++ to build systems running on hardware platforms... Read More →


Sunday September 22, 2019 09:00 - 17:00
Summit 6

09:00

Generic Programming 2.0 with Concepts and Ranges
Generic Programming 2.0 with Concepts and Ranges is a two-day training course with programming exercises taught by Crhistopher Di Bella. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Engineer, Codeplay Software
Christopher Di Bella is a Staff Software Engineer for Codeplay’s ComputeCpp Runtime Technology. He is a strong proponent for generic programming in C++ and C++ education. Chris was previously a software developer for Nasdaq, and a tutor for UNSW Australia’s COMP6771 Advanced C... Read More →


Sunday September 22, 2019 09:00 - 17:00
Summit 8

09:00

Parallelism in Modern C++: From CPU to GPU
Parallelism in Modern C++: From CPU to GPU is a two-day training course with programming exercises taught by Gordon Brown and Michael Wong. It is offered from 9AM to 5PM on Saturday and Sunday, September 21st and 22nd (immediately following the conference). Lunch is included.

Course, instructor, and prerequisite details are available here.

For individuals whose organization requires it, a certificate of completion is available for this event. For information contact registrar@cppcon.org.

Speakers
avatar for Michael Wong

Michael Wong

VP Research & Development, Codeplay Software
wongmichael.com/about
avatar for Gordon Brown

Gordon Brown

Principal Software Engineer, SYCL & C++, Codeplay Software
Gordon Brown is a principal software engineer at Codeplay Software specializing in heterogeneous programming models for C++. He has been involved in the standardization of the Khronos standard SYCL and the development of Codeplay's implementation of the standard from its inception... Read More →


Sunday September 22, 2019 09:00 - 17:00
Summit 9
 


Twitter Feed