Monday, 4 August 2025

C++ on Sea 2025 trip report

I'm writing this up a while after the event, because life got in the way. I hosted the lightning talks again, which distracted me for some parts of the first two days. I also gave a talk on the first day. The third day allowed me to just sit back and listen. 

We started with a keynote by Herb Sutter. He talked about "Three cool things in C++". The title was a way to decide last minute what those things would be. 


He covered reflection. std::execution and "EB" (erroneous behaviour) (mentioning standard library hardening and relocation too). My brain wandered off a bit because he was encouraging us to imagine what might be possible with the new features. So I day dreamed. I do think having reflection to generate some boilerplate will stop the trend to use GenAI for boilerplate, which is high up on my wish-list. 

 Next, I went to Sandor's "Namespaces 101" talk. He's written a trip report too, which has more details on the talks than I'm going to manage here. He asked why I was in his talk, because it was aimed at beginners. I was interested to see how he introduced the topic. As I expected he covered some basics I had forgotten. It's worth reminding yourself of the basics once in a while. I took a picture of one slide, because it summarised important stuff:



  • Using declaration are fine in .cpp files
  • Limit using directives to (and even in) .cpp files
  • Avoid namespace aliases, especially in header files
  • No more than 4 level nested namespaces
  • Differentiate between impl, detail, potentially detail or api
  • Always fully qualify in macros
  • Opening up a foreign namespace is often a code smell (it can happen sometimes)
I do enjoy beginner talks. Expert level talks are great too, but sometimes going back and thinking through the basics is important. Thanks for a great talk Sandor.

I gave my talk after lunch:

I demonstrated how to implement a simple form of reinforcement learning, letting my machine figure out how to play snake. I wasn't 100% polished, because I had lightning talks to sort for the evening. I got loads of intelligent questions from the audience. Thanks to all who came along. Hopefully I showed the so-called AI isn't magic (and isn't limited to GenAI). 

Steve Love talked after me about CMake. He usually brands himself as a C# programmer: go check out his C# Brain Teasers book. However, he was a C++ coder when we first met, and keeps his hand in with C++. Many CMake tutorials are too complicated and the docs are hard work, so his talk is a really useful introduction if you want to learn the basics of CMake quickly. 

The lightning talks were as follows:
  • Cassio Neri, Algebra, Algorithms, Alakazan!
  • Andrew Drakeford, Better Performance Through Structured Problem Solving: The Pólya Approach 
  • Robert Schimkowitsch, Start a User Group, in 5 Easy* Steps
  • Tom Tesch, Teaching the NES: What 6502 Assembly Reveals About Modern C++
  • Sandor Dargo, A recipe for designing your week
  • Guy Davidson, Dying for your language
  • Alex Vanden Abeele, Let's make VLD great again
  • Koen Samyn, Teaching GameDev: A C++ centric approach
  • Conor Spilsbury, How to Cook Your CPU with C++
  • Rashmi Khetan, Terminating your bugs with Time travel and AI
My laptop decided to speed through Andrew's slides. I must stop using PowerPoint. It does things. Bad things. Sometimes. Sorry Andrew!

On Tuesday, I started with Sebastian Theophil talking about To Err is Human: Robust Error Handling in C++26. He started with C-style error handling, moving on to C++ exceptions, std::expected, contracts and then library hardening:

"Hardening allows turning some instances of undefined behavior in the standard library into a guaranteed termination of the program."

See Open-std. He ended by discussing how and what to handle. 

Next I went to listen to Mateusz Pusz on The 10 Essential Features for the Future of C++ Libraries. I can't make sense of my notes properly. I don't have a list of ten things! But I did jot down non-type template parameters and his units library. He talked about variable templates and contracts (a little), and attempting compile time debugging with constexpr and consteval - which is hard. (Does anyone else pronounce consteval as const evil, or is it just me? (It's not evil, but can make your head hurt)) . He also mentioned scnlib. I'm currently writing an introductory C++ book for O'Reilly. Having a mix of std::println for output and std::cin for input is kinda weird. Here's hoping the new scan library becomes part of C++ one day. 

I couldn't get a consistent WiFi signal in the next session so went back to the hotel to piece together the lightning talks for that evening. I did get back in time to listen to Timur Doumler's KEYNOTE: Contracts, Safety, and the Art of Cat Herding. He promised a blog about Eiffel and completeness/correctness at some point. 

Tuesday's lightning talks were as follows:

  • Tina Ulbrich, Naming is Hard - a Field Study
  • Gil Hoben, GPU programming with Triton and C++
  • Evgenii Seliverstov, Conan Strikes Back: Easy Migration to Conan 2.0
  • Andrew Drakeford, Simple Compile Time Dynamic Programming
  • Björn Fahller, It *is* a pipe, but should it be? (Sorry Magritte)
  • Nico Eichhorn, From Wide to Wrong: Spotting Dangerous Conversions in C++
  • Florent Castelli, A note about safety
  • Robert Leahy, To Flush or Not to Flush? That Is the Question
  • Braden Ganetsky, Shimming OpenSSL Out of Necessity
  • Damien Buhl, Not Many option()s Left: Surviving CMake with Toolchain Files
  • Timur Doumler, Design by intuition
You notice Andrew came back for more? Pleased to report we used his pdf instead and it just worked. Thanks to everyone brave enough to talk. 

Wednesday was more relaxed for me. I started with Jason Turner on The Power and Pain of Hidden Symbols. He started by talking about ABI and related diff tools and then went on to LTO. A new angle for me was using LTO to find bugs.  His C++ Weekly YouTube has an episode which covers some of this. It was so nice to sit at the front and not be distracted by looming talks!

Next I went to listen to Nicolai Josuttis on Rethink Polymorphism in C++. He compared OOP with vtables to using std::variant and std::visit. People have Opinions about this. As I mentioned, I'm writing a beginner's book about C++. Trying to explain all the parts you need to get OOP working is C++ is hard work. There are so many details. Using a variant instead is much simpler, but does have drawbacks. For example, it only works on a closed set of types. I haven't quite decided how to introduce the variant in my book yet. I might stick to extending behaviour rather than showing an alternative to vtables, to avoid controversy. Nico' talk is worth listening to when it's out though. 

I went to see Tristan Brindle next. He talked about Faster, safer, better ranges. He showed various ways the standard could be improved. On example was filters and multi-passes causing trouble:


 (I will copy the code from the slide and play with it one day: basically reversing a range caused trouble). His flux library explores several ways to speed up and improve ranges, without nasty surprises like reversing a range causing trouble. 

I next ended up in Björn Fahller's talk Will your program still be correct next year? I had intended to go the green programming talk, but the schedule got switched. Björn 's talk was great. Another start simple thing: write some tests! He talked about prints then asserts first, and moved on to using testing frameworks. A really nice talk starting from something most of us have done: prints for debugging, to why actual tests are better.  We all know that but the reminder is always useful.

The final KEYNOTE: Why Software Engineering Interviews are Broken and How to Actually Make them Better was given by Kristen Shaker. She's left IT to become an estate agent. This gave her freedom to take down the interview process. Go watch the talk when it's out. We are doing it wrong, and I personally can't face another "homework question (it will only take 40 minutes)". Coding challenges always take hours, and most people lie about the time they spent. 

I had a great time, and learnt lots. The variety of talks, from beginner to expert is great. If you get the chance to go, you should.