Contents

Introduction

Meeting C++ 2017 took place at Andels Hotel in Berlin at 9th to 11th November. The conference is organized by Jens Weller. I think it has around 600 participants and it has been around since 2012.

This was my second time at the conference. This time I went together with Daniel Eriksson. Me and Daniel are two of the four co-organizers of the Gothenburg C++ Meetup.

I listened to all three keynotes, 8 talks and 12 lightning talks (including the bonus ones at the end). I also participated in the discussion session for user group organizers on the Friday and in the discussion session for embedded on the Saturday.

As I noticed already last year a lot of the talks I listened to involved template metaprogramming in one way or another. As someone coming from pure C and embedded this can feel tricky to say the least. I’m eager to put in some more learning time into this and see how I can make use of it.

Guy Davidson held a lightning talk about diversity and inclusion before the end keynote on the Saturday. I liked that he brought up this topic and I will try to follow his advice and also continously evaluate my own behaviour in order to support this issue.

A big thanks to Jens Weller and all the speakers for making this conference possible!

Below is a list of the talks I listened to.

Day 1 (Thursday)

Opening keynote: Better Code - Human interface (Sean Parent)

The opening keynote of the conference was delivered by Sean Parent. Sean currently works on Photoshop at Adobe. Sean talked aboth the relationship between a good human interface and good code.

Link: http://sean-parent.stlab.cc/papers-and-presentations

Practical C++17 (Jason Turner)

Jason Turner talked about what new features in C++17 he has found most valuable for his project ChaiScript. ChaiScript is scripting language for C++. It was nice to listen to Jason in person since I have heard him talking on http://cppcast.com/ many times.

Jason first listed a numbered a features he has used in ChaiScript and then ranked them based on readability, performance impact and such. I think I got the list written down correctly. He also made the presentation at ccpcon 2017 so you can double check there.

  1. class template deduction guides
  2. if constexpr
  3. string_view
  4. emplace_back
  5. fold expressions
  6. structured bindings
  7. class template argument deduction
  8. nested namespaces
  9. if init
  10. noexpect in the type system

Strong types

Jonathan Boccara talked about one possible way to implement strong types in C++.

The purpose of strong types is to carry meaning through names. Strong types also allow the programmer to create expressive code.

Link: http://www.fluentcpp.com

Modern C++ testing with Catch2

Phil Nash talked about the testing framework Catch2. Catch2 is a header only test framwork.

Catch2 works well with the following mock frameworks:

Beyond the compiler: Advanced tools for better productivity

Gábor Horváth talked about tools that can help you as a programmer:

  • clang format
  • clang tidy
  • clang static analyzer
  • CppCheck
  • sanitizers
  • source based coverage
  • fuzz testing
  • profile guided optimization
  • lto
  • strict analysis

Day 2

It’s complicated

The opening keynote of day 2 was held by Kate Gregory. She talked about her relationship with C++. She talked about the value of knowing the whole language: syntax, idioms and patterns to be able to the find the most fitting design for a certain scenario. Knowing also allows us to write more simple code by selecting a certain idiom or pattern. She discussed some principles of simplicity:

  • move and hide complexity
  • eliminate complexity altogether when possible
  • readability matters
  • good names
  • use well recognized idioms

Kate went on to discuss the C++ core guidelines. She discussed the value of a short and general guidelines such as “don’t use exceptions” versus more complicated guidelines found in the core guidelines. She argued that the guidelines needs to be a bit complicated to guide us correctly in a complex world.

Her key take aways was:

  • try to really learn the whole language
  • use the core guidelines
  • value simplicity
  • never stop learning

An inspiring introduction to template metaprogramming

Milosz Warzecha introduced template metaprogramming to the audience.

Template metaprogramming is about doing things in compile time rather than in run time. Too much use of metaprogramming can afftect the compile time. Metaprogramming bugs can also be difficult to track down.

Milosz went on to tell us about how template metaprogramming started in the early 90ths by mistake. Erwin Unruh created a C++ program that calculated prime numbers during compile time and printed the output in compiler error messages. So the program could not actually compile be still produced the result.

Milosz discussed a number of programming techniques used to perform template metaprogramming:

  • static_assert
  • type traits, e.g. is_class<T>
  • meta functioncs, e.g remove_const
  • is_same
  • is_my_dream
  • find_type
  • member detection trick
    • SFINAE
  • enable_if
    • predicate - a function that return true or false
    • also use SFINAE
  • containers for types
    • variadic templates
    • push_back
    • pop_front
  • std::transform but at compile time

Concepts Driven Design

Kris Jusiak started the talk by telling us a little bit about the history of Concepts in C++. He specifically told us about a ISO C++ meeting in Frankfurt 2009. At that meeting Concepts was voted out of the standard. Kris Jusiaks understanding of the situation as that the committe did not want further delays in C++0X (later renamed to C++11) and Concepts was a complex addition that did not feel mature enough to include at the time:

  • the syntax was considered only expert friendly
  • the compile time was affected in an inacceptable way
  • could not scale down

Bjarne Stroustrup wrote a paper already in 1987 what requirements he had on templates:

  1. zero overhead
  2. general
  3. well specified interfaces

The top two items (1 & 2) were achieved when templates were originally introduced into C++ but not the last, due to the lack of Concepts.

There are mainly two motiviations behind concepts:

  • to be able to put requirements on template type arguments
  • to provide better compiler diagnostic messages when templates are used with incorrect types

Concepts are currently included in the C++ draft. Bjarne Strostrup and Andrew Stutton are very much involved in the work regarding getting Concepts into the standard.

Links:

Declarative Thinking, Declarative Practice

Kevlin Henney talked about a declarative approach to programming.

Subtle state changes is a problem with imperative style.

Discussion among user group organisers

Quite long discussion, missed last talk session.

Day 3 (Saturday)

Lightning talks

function_ref (a non-owning reference to a Callable)

Vittorio Romeo gave a lightning talk about a paper he wrote where a proposes the addition of a so called function_ref to the standard library.

A variant of recursive descent parsing

Björn Fahller gave a lightning talk with the title “A variant of recursive descent parsing”.

A Very Quick View Into a Compiler

Arvid Gerstmann gave a lightning talk with the title “A very quick view into a compiler”.

Multi dimensional arrays in C++

Cem Bossay gave a lightning talk with the title “Multi dimensional array in C++”.

A short story about configuration file formats

Andreas Rein gave a lightning talk with the title “A hort story about configuration file formats”.

The hidden rules of world-class C++ code

Boris Schäling talked about two alternative ways to design code to setup socket connections:

  • traditional way using inheritance
  • alternative way using
    • free functions
    • templates
    • classes

Boris advocated the second alternative.

Goal of design:

  • delegation of object creation
  • extendiblity
  • code reuse
  • decouple init of factories from creating connection

Boris likes language features that solve specific use case locally in the code.

Extra lightning talks

Polymorphic tasks template in ten (minutes)

Sean Parent gave a lightning talk with the title “Polymorphic tasks template in ten (minutes)”.

5 things I figured out while I was supposed to be dying

Kate Gregory gave a lightning talk with the title “5 things I figured out while I was supposed to be dying”.

Diversity and inclusion

Guy Davidsson gave a lightning talk about diversity and inclusion on the C++ community.

Link: https://github.com/include-cpp/include

Rainer Grimm

Rainer Grimm gave a lightning talk but I don’t have a title unfortunately.

Composable command line parser in Catch2

Phil Nash gave a lightning talk with the title “Composable command line parser in Catch2”.

Programming in a different domain

Jens Weller gave a ligttning talk about programming in a different domain.

Closing keynote: What can C++ do for embedded and what can embedded do for C++?

Wouter van Ooijen gave the closing keynote with the title “What can C++ do for embedded and what can embedded do for C++?”.