Visitors and Cheesy Mixins

This is a past event

61 people went

Location image of event venue


This month we welcome back Denis Yaroshevskiy and Gašper Ažman.

Please sign up on the Skills Matter site, too:

19:00 "Intro and News" - Timur Doumler

19:10 "std::visit in All of It's Glory" - Denis Yaroshevskiy

There are two popular exercises in C++ template meta-programming: implementing std::tuple and std::variant. However, when it comes to std::visit (an absolute must utility for variant), usually people show a very limited implementation that does not support multiple dispatch or return type deduction. They don't do it for a good reason - it tends to get messy. However, with C++17 I managed to write one that is pretty clean (for meta-programming) and supports all of the requirements. The talk is about how to do that.

19:50 break

20:10 "Sandwich Mixins - Just Add Cheese" - Gašper Ažman

In Liberasure, I seem to have stumbled on a mixin pattern that actually works. It gracefully (and correctly) hides the CRTP, it's so trivial you don't need a library for it, and it allows you to treat the various mixins symmetrically.

Then, I tried googling if anyone's done anything similar, and I could not figure out what I'd google for. Therefore, I am naming it "sandwich mixins". Work experience suggests it's the first truly composable paradigm.

Since its inception in Liberasure, other libraries have picked it up, and some have discovered something like it independently.

If you care about composing interfaces or interdependent functionality using mixins, you might just learn a way so simple you'll never do it differently again.


About the speakers:

Gašper has been trying to have the compiler prove his code since 2008, and it's been going better of late. He has written code for the web, backends, and research tools, for UC Berkeley, (, and currently Citadel. He has corrected proofs in "From Mathematics to Generic Programming", and frequently attends C++ conferences.

During the day Denis is a senior software developer at Bloomberg. He is also an occasional contributor to libc++ and Chromium, in particular he is responsible for Chromium's implementation of flat_set.