Skip to content
DevMeme
3596 of 7435
C++ Feature Creep as a Spectator Sport
Languages Post #3933, on Nov 15, 2021 in TG

C++ Feature Creep as a Spectator Sport

Why is this Languages meme funny?

Level 1: Too Many Toys

Imagine you have a giant toy box that’s already overflowing with toys – some you play with, but many you’ve never touched. Now picture one of your friends keeps tossing in even more toys from other kids’ rooms, even though you don’t really need them. You ask, “Why are you adding more? I already have plenty I don’t use.” Your friend grins and says, “I just want to see when our parents will finally say we have too many toys.” You look at the pile spilling onto the floor and nod jokingly, “Ha, fair enough.”

This is exactly what the comic is comparing the C++ programming language to. C++ is like that overstuffed toy box – it has lots and lots of features (toys). Some of those features are really handy (your favorite toys), but many are very specialized (toys you never play with). The “parents” in this analogy are the people in charge of C++ who keep approving new features (they’re usually very strict, but here they haven’t said “stop” yet). The humor comes from the silly idea of adding more and more unnecessary things just to test when someone in charge will finally exclaim, “Alright, that’s enough!” It’s funny because normally you’d expect a responsible adult (or committee) to limit unnecessary stuff, but here the friend (or developer) suggests pushing it further on purpose. It’s like a kid stuffing candies into a basket to see when the shopkeeper says it’s too much – a bit mischievous and cheeky. The joke captures a feeling of “C++ already has absurdly much in it… so hey, why not add everything imaginable and see what happens?” It makes us laugh because it’s highlighting how over-the-top the situation already is, using a playful prod at the people who keep saying “yes” to more.

Level 2: Modern C++ Overload

Let’s break down what’s happening in this comic for those newer to C++ or programming in general. We have two developers talking about the C++ language standard. One dev is saying they’re trying to get the next C++ standard to include “additional constructs from other languages.” In simpler terms, they want to add more features to C++ that it currently doesn’t have, borrowing ideas from other programming languages. The other dev basically asks, “Why? C++ already has lots of stuff no one ever uses.” This reflects a common sentiment: Modern C++ (meaning the versions of C++ from the last decade or so) has become very large, with tons of new language features. Many of those features are powerful but also quite complicated or niche, so a typical programmer might go through their whole career without needing them.

First, what is the C++ standard? C++ is defined by an official document (maintained by the ISO C++ committee) that gets updated periodically (every few years). Each update is a new standard version like C++11 (2011), C++14 (2014), C++17, C++20, and the upcoming C++23. These standards introduce new syntax and library components to the language. For example, C++98 (1998) was the first big standard. Then C++11 introduced huge changes (auto keyword for automatic type deduction, lambda functions which let you write in-line function definitions, smart pointers to help manage memory, etc.). C++17 and C++20 kept adding more, like structured bindings (a neat way to assign multiple variables at once from a pair or tuple), concurrency libraries (for multi-threading), and so on. So when the comic says “Modern C++ is already full of things no one will ever use,” it’s pointing at how extensive and sometimes over-engineered the language feels. “No one will ever use” is an exaggeration, but it’s true that some features are used by maybe 1% of developers or only in special situations. A newbie reading about C++ might be overwhelmed by how many keywords and constructs there are.

Now, the dev in the comic wants to add even more constructs from other languages. This has actually been a trend: C++ often adopts features that proved useful in other languages. A few examples:

  • Lambdas: As mentioned, borrowed from functional languages (like what you see in JavaScript or Python as anonymous functions) – C++ added them so you can create little throwaway functions in place.
  • Auto and type inference: Other modern languages (like D, or even C# with var) had this idea of the compiler figuring out the variable type for you. C++11 added auto so you don’t always have to spell out long types.
  • Range-based for loops: Syntactic sugar inspired by languages like Python’s for x in collection loops. In C++ you can now do for(int x : myVector) { ... } instead of the more clunky iterators.
  • Modules (in C++20/C++23): Many languages have a module or import system (e.g., Python’s import or Java’s packages) to avoid textual inclusion of code. C++ is adding that to eventually move beyond the old #include header files.
  • Coroutines: This feature (in C++20) lets functions pause and resume (for async programming), similar to how Python’s async/await or JavaScript’s promises work.

These are all real examples of C++ committee pulling in constructs that originally were popular in other contexts. The joke here is suggesting they’ll cram in even more – implying maybe pointless or overly exotic things next. Think of features that exist elsewhere but nobody asked for in C++: for instance, “What if C++ copied Python’s whitespace-sensitive syntax?” or “What if they add an entire SQL query language into C++ as a feature?” Such ideas sound ridiculous – that’s why it’s funny. It’s humor via exaggeration: C++ is already complex, so why not go all-in and make it absurdly complex by adding everything, even things that clearly don’t belong? It’s poking fun at the idea of feature creep.

Feature creep is a term usually used in software projects to describe when new features keep getting added beyond the project’s original scope, often unnecessarily. In the context of a programming language like C++, feature creep means the language keeps expanding with more and more features. Every time a new standard comes out, programmers joke, “Here we go, what new toys are we getting, and will we actually use them?” Some developers feel like the language is a bloated kitchen sink – meaning it has everything but the kitchen sink included (and maybe now the kitchen sink too!). This can make the language intimidating to newcomers. Imagine if you’re just starting with C++: you have to learn not just basic syntax, but also which of the many features are relevant. Many tutors or books will actually tell you, “Don’t worry about that part of C++, nobody uses it,” which says a lot about how big the language is.

The comic also hints at the C++ standard committee culture. This committee is a group of experts that meet to discuss and vote on these changes (represented humorously by the seated developer saying he’s pushing for introduction of features – as if he’s championing a proposal in a meeting). These committees often include people from big tech companies, game companies, and academia – all with their own ideas of what C++ needs. There’s a bit of committee drama sometimes: debates can get heated about what to include or exclude. But externally, developers joke that the committee loves to add stuff. Rarely do they say “no” to a new feature unless it’s truly infeasible or too early. They also almost never remove old features (for fear of breaking existing code). So C++ just grows and grows, carrying along every past decision. The meme’s punchline “to see where they finally draw the line” is basically saying: I wonder if this committee will ever say “enough, no more new features”. As of 2021 (when this meme was posted), it feels like that hasn’t happened yet – they keep surprising us with more.

To put it in a relatable way: if C++ were a car, every few years they add new buttons, new gear levers, perhaps an extra steering wheel just in case. Seasoned drivers (programmers) stick to the ones they know and ignore the rest, but the dashboard’s getting pretty intimidating for new drivers. The dev in the comic saying “Makes sense” in a deadpan way is like acknowledging the absurd logic. It’s as if one friend said, “I’m going to stuff even more random gadgets into this already overstuffed toolbox,” and the other friend shrugs and goes, “Yeah, sure, why not – this thing is already ridiculous.” It’s a bit of friendly sarcasm aimed at C++’s complexity, which is a well-known topic of developer humor in our industry.

Level 3: Feature Creep++

For seasoned developers, this meme hits right at the intersection of technological overgrowth and dark comedy. C++ has been around since the 1980s and has accumulated layers upon layers of features with each new standard (C++98, C++11, C++14, C++17, C++20, and so on). The phrase “Modern C++” usually refers to the styles and features from C++11 onward – things like auto type deduction, lambda functions [](){}, smart pointers like std::unique_ptr, concurrency libraries, and template trickery that our older C++ code never dreamed of. While these features ostensibly make the language more powerful and expressive, they also make it frighteningly complex. This leads to the common industry joke that no one actually uses most of these features – or if they do, they use them in very limited, library-specific contexts. The meme exaggerates this by implying the C++ committee just can’t stop adding stuff, even if 99% of developers won’t ever touch it. It’s like a compulsive hoarder acquiring exotic gadgets that gather dust. We all know that one team member who over-engineers a simple module by using ten different design patterns and template meta-programming when a straightforward loop would do – C++ the language is doing that at a global scale.

Why is this funny (and a bit painful) to experienced C++ devs? Because we’ve all experienced “feature creep” in projects – those situations where more and more unnecessary features get piled on, making the system unwieldy. Here, the feature creep is in the language itself. A senior engineer sees the irony: the more features C++ committee adds, the less likely everyday devs are to use them, either because they don’t know they exist, they’re too niche, or they make the code hard for others to read. There’s a shared memory of reading code that might as well be hieroglyphics due to obscure C++ idioms. For example, template metaprogramming techniques like std::enable_if or tag dispatching were so convoluted that most devs copy-pasted them from Stack Overflow without truly grokking them. Along comes C++20 with Concepts (a way to constrain template parameters with conditions), aiming to make that easier – great! – but now Concepts themselves are another thing to learn, and you still encounter code that looks like gobbledygook if you’re not in the loop. It’s a catch-22: we add features to make hard things easier, but having so many features makes the language as a whole harder.

The meme specifically calls out the idea of introducing additional constructs from other languages. This is something the C++ committee actually does regularly, with both good and eyebrow-raising results. For instance, lambdas were borrowed from Python/functional languages to let you write inline functions easily. List initialization using braces {} was inspired by languages that have cleaner array literal syntax, aiming to prevent pitfalls of the old C-style arrays. They even flirt with ideas like pattern matching (inspired by functional languages like Scala or Rust) for future C++ standards. Each time such a proposal comes up, veteran C++ programmers collectively wonder, “Do we really need this in C++?” There’s a mix of FOMO (fear of missing out on cool new paradigms) and caution (don’t turn C++ into an undisciplined monster). The meme’s protagonist says “I just want to see where they finally draw the line.” – which is a tongue-in-cheek way of saying the committee seemingly has no clear line on when to stop. It’s genuinely hard to imagine what feature would be too much, given we already have things as wild as pointer-to-member-function syntax (ever seen int (MyClass::*ptr)(double)? Yeah, that exists), user-defined literals (you can define 100ms as a literal for 100 milliseconds), and even an entire time library because dealing with time zones and calendars apparently had to be in the language core.

In real-world terms, this humor resonates because C++ developers have felt the cognitive burden of the language’s evolution. If you learned C++ in the early 2000s and then took a decade-long nap, waking up to C++20 code is like stepping into an alternate reality. A simple “Hello World” can now hide a lot of subtlety – e.g., using std::string_view instead of std::string for efficiency, or using constexpr functions to compute something at compile time, or seeing co_await in what used to be a straightforward function. The language didn’t just grow; it ballooned. This growth is driven by the cpp_standard_committee – a group of smart, passionate language experts (and corporate representatives) who genuinely want to improve C++. But they have inside jokes about how contentious meetings can get (committee drama is real: debates on, say, how to implement threads or whether to include a certain minor feature can span years of meetings and papers). There was infamously drama around C++11’s memory model, and around adding Modules vs traditional headers, and whether to include a Garbage Collector (they didn’t, after much debate – perhaps one line drawn, since C++ devs generally don’t want a mandatory GC). So the meme indirectly references this image of a committee almost gleefully stuffing new ideas into the language, and one cheeky member saying, “heck, let’s push even more and see if anyone has the sanity to say stop.” Experienced devs chuckle at that because it often feels like no one ever says stop.

We can also talk about the impact on Developer Experience (DX). C++ is powerful, but with great power comes great responsibility – and great frustration when something goes wrong. Many of us have lost hours deciphering template errors or reading up on a feature that sounded cool but had 5 pages of footnotes in the standard. There’s a reason you hear jokes like “I use C++, but I only use a subset that I’m comfortable with.” In large codebases, teams often ban or restrict certain features – not because they’re inherently bad, but because nobody on the team would understand the code if someone started using, say, an overly clever fold-expression or a pack expansion inside a lambda in a template alias… what did I even just say? Exactly. The language features can get so abstract that it reads like rocket science. So a senior dev sees this comic and nods: Yep, Modern C++ has a ton of stuff nobody ever touches. The humor is that instead of pushing back on this absurdity, the character in the comic says, “I’m actually advocating for even more unused stuff, just to see when it’s too much.” It’s a form of sarcastic surrender – like watching a train that has no brakes and saying, “Might as well add more cargo and see when the wheels fall off.”

From an architectural and historical perspective, C++’s growth has been a double-edged sword. It’s one of the few languages that tries to maintain backward compatibility all the way to the 80s while still keeping up with modern programming concepts. This means the committee almost never removes things; they only add (the rare exceptions are things like removing trigraphs – an old, obscure feature where sequences like ??) represented characters, which almost nobody used deliberately). Because they don’t remove much, all the cruft accumulates. Other languages handle evolution differently: for example, Python had a breaking change from Python 2 to Python 3 that forced the removal of outdated things (painful but it cleaned the slate). C++ never had a clean slate moment. So insiders joke that today’s C++23 is really like having C++98, plus every extension and experiment bolted on top. This layered legacy means experienced devs often have war stories working with “legacy C++” code that uses old-style features right alongside shiny new C++20 features, creating a confusing mix. Ever tried explaining to a junior why one file uses raw pointers and manual new/delete while another uses std::shared_ptr – in the same codebase? The answer: history and gradual adoption of new features (with a dash of ignorance or resistance).

Ultimately, the senior-perspective punchline is about poking fun at the C++ standards committee and the language’s notorious complexity. It’s a bit of an affectionate roast. The dev saying “Makes sense” in the last panel is basically giving a smirking approval to an obviously absurd idea – it’s the cynic in us acknowledging that, at this rate, nothing is too absurd. We’ve grown jaded: Oh, you want to add the entire JS event loop model into C++? Sure, why not, it already has everything else! The reason experienced folks laugh (and maybe groan) is because it’s barely an exaggeration. Each new standard does feel like a Christmas catalog of features where practitioners will scratch their heads figuring out which ones (if any) to actually use in real life. The meme distills that sentiment into a simple conversation, and anyone who’s struggled with a bizarre C++ feature (or sat through a meeting about adopting a new standard at work) will likely chuckle and say, “Ha, so true – C++ just doesn’t know when to stop.”

Level 4: Turing Tar Pit++

Modern C++ isn’t just a programming language – it’s practically a computer science museum of every paradigm and trick ever invented. The language has accumulated so many features that its grammar and type system verge on the Turing tar pit: you can do almost anything, but it’s incredibly easy to get stuck in the muck of complexity. In fact, C++ template meta-programming is famously Turing-complete – meaning you can compute arbitrary things at compile time, solving puzzles no one asked for. This extreme flexibility comes at a cost: the compiler sometimes turns into an overzealous mathematician, churning through template instantiations like it’s solving the Halting Problem. The result? You get compiler error messages longer than a CVS receipt, often from misusing a feature nobody knew existed until it blew up at 3 AM.

One reason these esoteric features slip into the standard is that C++ is multi-paradigm by design – it supports procedural, object-oriented, generic, and even some functional programming styles. Every time the committee imports a cool construct from another language (say, lambda expressions from functional languages or concepts akin to Haskell’s type classes), the language’s complexity grows combinatorially. The C++ standard document itself is now gargantuan – nearly 2000 pages of dense specifications and corner cases. Parsing C++ has become a near-arcane art: the language grammar isn’t even purely context-free (you often need to know the types and templates in advance just to parse a statement correctly). For example, the compiler must discern whether SomeType<x,y> is a template parameter list or a comparison expression SomeType < x , y > – a seemingly trivial decision that actually requires two-phase name lookup and context-sensitive parsing rules. This kind of syntax overload gives language theorists nightmares and has turned implementing a C++ compiler into a feat of engineering sorcery.

By cramming in every construct under the sun, C++ has also become a poster child for feature interaction problems. New features don’t live in isolation – they love to collide in unexpected ways. Consider how initializer lists introduced a subtle parsing ambiguity with angle brackets, forcing the committee to tweak the syntax (>> vs > > issue) to avoid breaking older code. Or the introduction of auto type deduction and universal references, which simplified life and created the notorious && reference collapsing rules that only library authors truly understand. Every addition has a ripple effect: add an innocuous-sounding feature like constexpr (to evaluate code at compile time) and suddenly you’ve enabled recursive template metaprograms that can generate prime numbers during compilation – neat, but utterly overkill for everyday programming. In theory, all these additions increase expressive power, pushing C++ closer to being a Platonic ideal of a programming language that can do everything. In practice, they also increase the chance that two features will interact to create a subtle bug or an incredibly steep learning curve for the uninitiated. It’s a classic case of over-engineering: solving problems so generally that the solution itself becomes a bigger problem.

The meme’s absurd suggestion – “introduce additional constructs from other languages into the next C++ standard” – is basically poking this beast with a stick. It’s a dark joke about language evolution crossing into self-parody. The C++ committee is infamous (in a loving way) for its thoroughness and willingness to entertain almost any well-formed proposal. They’ve imported smart pointers (to manage memory safely, inspired by languages with garbage collection), range-based for loops (niceties from higher-level languages), modules (like a safer, saner alternative to the chaotic header #include mechanism), coroutines (for asynchronous code, drawing inspiration from Python/Go), and dozens of other constructs. Many of these features are brilliant individually – when you need them. But collectively, it makes the language feel like a bulging toolbox where 90% of the tools are specialty wrenches for problems you’ll never encounter in your day job. We’ve reached the point where even veteran programmers joke that no single person knows all of C++ in detail. The meme’s punchline – wanting to see “where they finally draw the line” – wryly implies that maybe there is no line. If one day someone proposed adding a kitchen sink literal or adopting Python’s whitespace-sensitive syntax as an option, you get the sense the committee might actually discuss it with a straight face. (Okay, perhaps that’s where they’d draw the line… but who knows?)

Amidst the sarcasm, there’s an underlying truth that language designers and compiler writers know: every new construct must justify its existence against the complexity budget. C++ has been spending that budget liberally for decades. Eventually, even the committee will hit a point of diminishing returns – when adding one more feature could collapse under its own weight. The meme is the grizzled developer’s way of saying “We’re adding what now? Sure, go ahead – I’m just here for the fireworks.” It’s humor with a side of genuine concern, steeped in the recognition that C++ has wandered into a meta-programming maze where the walls are made of template brackets and every turn introduces a new dialect of the language. At the highest level, the meme is a commentary on PL theory meets reality: it highlights how a language can approach the brink of theoretical complexity – the kind where you brush up against formal limits of decidability and human cognitive load – all in the pursuit of not leaving any feature behind. It’s a sly nod to the absurd beauty of C++: a language where everything is possible, including drowning in your own power.

Description

A three-panel comic strip depicting a conversation between two developers. In the first panel, one developer, sitting at a laptop, tells his colleague, 'I'm pushing for the introduction of additional constructs from other languages into the next C++ standard.' In the second panel, the colleague questions this, asking, 'Why would you do that? Isn't Modern C++ already full of things no one will ever use?' In the final panel, the first developer admits his true motive: 'At this point I just want to see where they finally draw the line.' His colleague calmly replies, 'Makes sense.' The meme humorously critiques the perceived 'feature bloat' of the C++ language, suggesting that the standards committee adds so many complex and esoteric features that its evolution has become a morbid curiosity. It's a cynical take, relatable to senior engineers who have tracked the language's increasing complexity through successive standards (C++11, 14, 17, 20, etc.)

Comments

25
Anonymous ★ Top Pick By C++32, the 'Hello, World!' tutorial will start with a chapter on which of the 17 ways to manage memory is least likely to summon an elder god
  1. Anonymous ★ Top Pick

    By C++32, the 'Hello, World!' tutorial will start with a chapter on which of the 17 ways to manage memory is least likely to summon an elder god

  2. Anonymous

    At this rate, by C++30 “int main” will be an optional module and the semicolon will have a constexpr overload - yet the committee call will still open with, “any objections?”

  3. Anonymous

    The real tragedy isn't that C++ keeps adding features from other languages - it's that after 40 years, we still can't agree whether to use std::optional<T&> or just accept that references can't be null... meanwhile the committee is debating whether pattern matching should use 'inspect' or 'match' while Rust developers are already shipping production code

  4. Anonymous

    The C++ standards committee operates on the principle that if you can't decide which paradigm to support, just support all of them simultaneously. At this point, C++ isn't a language - it's a museum of programming language features where every exhibit is mandatory reading, but the gift shop only sells books on template metaprogramming and move semantics that nobody fully understands

  5. Anonymous

    Modern C++ is turning into Haskell with a C ABI - zero-cost abstractions, compound-interest compile times

  6. Anonymous

    Modern C++: hoarding other languages' unused esoterica like a collector who never opens the packaging

  7. Anonymous

    C++: the only language aggressively importing features from everyone else while exporting a stable ABI to no one

  8. @mekosko 4y

    Как последнее переводится?

    1. @nkormakov 4y

      - В (текущей ситуации|данный момент) я хочу лишь увидеть, где они проведут черту (перестанут это делать) - Разумно

      1. @sylfn 4y

        @llacqie @galgvithr @nkormakov please speak english in this chat (copy as you are not chat member)

        1. @nkormakov 4y

          First person asked for a translation

          1. @sylfn 4y

            No rule violation * but better to adk for meaning/translation using english, and not (yourlang)

            1. @nkormakov 4y

              yep, that would be better

        2. @RiedleroD 4y

          I believe ppl still get notified of pings when they're not in the chat

          1. @sylfn 4y

            they dont

          2. Deleted Account 4y

            > notified of pings 5 packets transmitted, 5 received, 0% packet loss, time 4002ms :)

        3. @Vlod_R 4y

          Is there a chat of this channel? If so, could you please share a link? I didn't find it in channel description -(

          1. @sylfn 4y

            https://t.me/devs_chat

            1. @Vlod_R 4y

              Thanks

  9. @galgvithr 4y

    Дословно -- имеет смысл. Вольный перевод - "Разумно."

  10. @stingfly69 4y

    Lol

  11. @sylfn 4y

    this is not good but not illegal

  12. @feskow 4y

    Wut

  13. @RiedleroD 4y

    heya it's still alive after throwing it off its stand today

    1. @RiedleroD 4y

      had to scramble to get to school :/

Use J and K for navigation