The beginning was straightforward and had some good takeaways. The message was, as he showed through some examples such as a date class, that if you can avoid mutating state, then do so. Prefer to construct immutable objects that support fast copying via move semantics. This way, you can preserve class invariants easily. This is something I agree with, and have started to try to do in my new code. I guess the other benefit is that you can avoid passing const ref& around, and just pass by value everywhere, and the compiler will optimize it for you via return value optimization and move semantics.
Kevlin spends the middle part of the presentation talking about how to implement an immutable list in C++ using the STL style. The main change seems to be he has added const modifiers to everything, pop_front/pop_back now return a new list minus one popped element, and he's added an internal shared_ptr to track references to the list, (I didn't quite follow why it was used - I'd probably have to rewatch the presentation). Then, at the end, he talks about asynchronous computation, and how functional programming is a better fit for concurrency because now you need no locks, since data is immutable, and lo, we have an immutable list. But I'm not sure how they go together to solve any of the typical problems I have with concurrency. Typically I want concurrency because I have a huge, compute intensive problem. With this list, suddenly, I have a huge explosion in memory requirements as each time the list is mutated, I have to store a new copy of the list. I guess I'd also then have to synchronize access to my new mutated list reference? I'd need a different algorithm. I feel like functional languages prefer recursive divide and conquer approaches.
So, in the end, I don't think I was the right audience for this talk, or I didn't have enough time to devote to understanding it. I watched the video and ended up more confused about functional C++. I did enjoy his last slide about the actor model. Being familiar with it, I agree that it is a good solution for certain types of concurrency. I see it as sort of a generalized solution to execution flows that can be pipelined.