20 comments

[ 181 ms ] story [ 752 ms ] thread
I feel like he went through all this effort just to make the joke "A more perfect union."

But seriously, a great write up. std::any looks like it could be dangerous in the hands of the inexperienced, especially in a sea of other changes that makes working with types easier and safer.

What are you talking about? This is C++. Everything can be dangerous.
Every time I see one of these new revisions, I can't help but think that the type system has become the roadrunner and the STL has become wile e coyote, complete with dynamite and cartoon physics.

Seriously though, does anyone actually use any of the post-C++-11 stuff? I can count on one hand the times I've seen nonironic use of a C++-11 extension in a real project, and I've never seen use of -14 or -17 extensions.

I've used boost::optional for a long time. It is long overdue in the standard. NULL should almost never be a valid value. It is also quite useful to enable safe lazy initialization without heap allocation.

std::variant is just a discriminated union. That's useful for lots of things.

C++11 is old school at this point. Other than for legacy reasons, no one should be using the older stuff.

> does anyone actually use any of the post-C++-11 stuff

Many major C++ projects are using C++11, e.g. LLVM/Clang, Chromium, etc.

post C++11, like 14 or 17
C++17 is not released yet and the current major C++17 implementations aren't ready for production use.

C++14 doesn't have many new features. C++14 contains many fixes on minor details which was implemented even in C++11 implementation because the Standard wording of C++11 is either ambiguous, impossible to implement, considered too harmful on that fixed part.

oh i know, i was just trying to clarify the question asked.
Yes, good C++ programmers use them. By 'good' I mean good enough at their profession to have bothered to pay attention to developments outside of their immediate experience over the last 5-10 years. Which is a pretty low bar, really.
As someone that does Java and .NET consulting, with an ocasional use of C++ on the projects, I would say outside the SV darlings (Google, FB, Microsoft, Apple, ...), sadly very few people do.

While I do try to keep up with the standard, the majority of the code I bump into, on those projects, is still the typical pre-C++98 style and most devs aren't that keen in moving forward.

Specially in projects that are mostly driven by changing consulting company every few budget rounds.

Most of it seems pretty real-world to me. But if IIUC that std::filesystem means I don't have to write separate code for windows and linux, then it's hard not to imagine EVERYONE using that.
Most of it seems pretty real-world to me. But if IIUC that std::filesystem means I don't have to write separate code for windows and linux, then it's hard not to imagine EVERYONE using that.
Lambda syntax is pretty cumbersome without the use of polymorphic parameters. (introduced after C++11)
There's too many people who understand C++, and C++17 is going to fix that.
The "structured bindings" feature seems potentially dangerous. I guess it helps unpacking tuples and getting references to tuple members. But it seems to have opened up a whole new set of side effects.
This is true, though generally anytime one uses `auto` it should be `const auto&` to avoid swallowing the quantifiers and potentially costly copies anyways.
I wish there was a resource like this for python2 vs python3. I'm trying to switch to Python3.