C++ Developers vs. The Standards Committee
Description
A meme using the Anakin Skywalker 'It's outrageous, it's unfair' format from Star Wars: Episode III - Revenge of the Sith. The top caption reads, 'When the C++ committee does not include reflection in the new standard yet again'. The image below shows Anakin Skywalker looking distraught and complaining. The subtitled text at the bottom captures his famous line, 'How could they do this? It's outrageous, it's unfair'. This meme perfectly captures the long-standing frustration within the C++ community. Reflection, the ability of a program to inspect and modify its own structure and behavior at runtime, is a powerful feature available in many other modern languages. Its repeated omission from new C++ standards (like C++17, C++20, and C++23) is a major pain point for developers who are forced to rely on complex template metaprogramming and macro-based workarounds to achieve similar functionality. The meme equates the developers' feelings of being slighted by the standards committee (WG21) to Anakin's sense of injustice at not being granted the rank of Master
Comments
38Comment deleted
The C++ committee treats reflection like a Jedi Master treats the dark side: they acknowledge its power, but are terrified of what will happen if they actually let anyone use it
Every time WG21 punts on reflection, another senior dev writes a 300-line constexpr template that accidentally invents category theory just to stringify a struct - zero-cost abstraction, they said
After 20 years of template metaprogramming gymnastics and SFINAE nightmares, C++ developers have mastered the art of compile-time reflection through sheer force of will and recursive template instantiation - who needs language support when you have 10,000-line error messages to guide you?
After decades of template metaprogramming gymnastics and SFINAE dark magic just to inspect types at compile time, C++ developers watching the committee defer reflection yet again is like watching Anakin's fall to the dark side - inevitable, tragic, and somehow still surprising every time it happens. Meanwhile, languages born in the 2010s ship with reflection in their MVP, but hey, at least we have concepts now... only took 20 years for those too
C++ reflection: the feature WG21 keeps punting like a perfect-forwarding universal reference - always almost usable, eternally undefined
C++ skipped reflection again, so our “metadata” is CRTP + constexpr + SFINAE + a Clang plugin - zero-cost abstraction, infinite-cost pipeline
WG21 defers reflection; we ship it anyway - 12k-line Clang plugin, custom IDL, and nightly builds that standardize ODR violations
Explain pls Comment deleted
Russian translate: когда комитет C ++ снова не включает отражение в новом стандарте. Как они могли это сделать? Это возмутительно, это несправедливо. Comment deleted
Evolution of meme text 👀 Comment deleted
Рефлексия не переводится)) Comment deleted
Is this a Java reference? Comment deleted
Вместо того чтобы програмить - учим новые стандарты👍 Comment deleted
Isn’t this a same thing? Btw, couldn’t you stick to community language, please? Comment deleted
Dafuq Comment deleted
So, community language is C++ or what? Comment deleted
if (strcmp(&community_language, "C++"){ /* write however you want in the comments */ } Comment deleted
Ooooh Comment deleted
Looks like old good plain C Comment deleted
if (strcmp(&community_language, "C++"))[[ likely ]]{ /* tak lutshche? */ } Comment deleted
if ( std::strcmp(community_language.c_str(), "C++") )[[ likely ]]{ /* a tak? */ } Comment deleted
std::strcmp ?🤭 Comment deleted
yes, in fact Comment deleted
ain't std::string::compare more cplusplusish? Comment deleted
iirc it doesn't support char const *, so you'll need to using namespace std::string_literals; "C++"sv Comment deleted
std::string constructor: *exists* Comment deleted
#include <boost/algorithm/string.hpp> if (boost::iequals(community_language, std::string("C++"))) { std::cout << std::string("community language is " << std::string("c++") << std::endl << std::flush; } else { std::cout << std::string("community language is not " << std::string("c++") << std::endl << std::flush; } Comment deleted
why flush twice? Comment deleted
because Comment deleted
boost rocks 4real Comment deleted
using namespace std::string_literals; std::cout << "community language is " << (community_language == "C++"sv ? "C++" : "not C++") << '\n'; Comment deleted
std::endl does a flush and that's slow, so it's going away Comment deleted
cumunity_language == "C++" Comment deleted
i wanted that to be the next iteration Comment deleted
Btw, 2 errors in expression Comment deleted
Hmm, I only see one error, that missing parenthesis. Comment deleted
Or Php Comment deleted
i want those contracts too Comment deleted