Orthodox C++ (2016)
Overall reaction to “Orthodox C++”
- Many find the article shallow or dogmatic: it lists prohibitions instead of giving nuanced guidance or rationale.
- Others, especially from game/embedded backgrounds, say it largely reflects long-standing pragmatic practice: small subset, no RTTI/exceptions, limited stdlib.
- Several note that C++ is inherently multi-paradigm and every serious team already chooses its own subset; “orthodox” is just one more flavor.
C vs C++ and language complexity
- Some C programmers argue C++ adds heavy mental load: more hidden behavior, lifetime rules, and “footguns” than C.
- Others counter that C already has plenty of hidden complexity and UB; C++ at least offers stronger typing and better abstractions.
- A recurring theme: engineers are busy solving domain problems and don’t want to track every new C++ feature or version.
Modern features: auto, range-for, RTTI, exceptions
- Range-based for with
autois widely defended as readable and less error-prone than iterator boilerplate. - Critics say
autoobscures types in code reviews and diffs; proponents reply that type inference is standard in many languages and IDEs solve this. - Banning RTTI and
dynamic_castis seen by some as unnecessary; others call it a code smell and prefer manual or custom RTTI for performance/control. - Exceptions are highly contentious:
- Anti-exception camps cite unpredictability, debugging difficulty, determinism concerns, and unclear “what can this function throw?” contracts.
- Pro-exception voices stress they’re fine when used only for truly exceptional contract violations, not routine error handling.
Standard library, containers, and I/O
- Strong criticism of
std::map,std::unordered_map,std::deque, and evenstd::vectorfor performance, cache behavior, concurrency, and awkward APIs. - Others argue they’re perfectly adequate for vast amounts of real-world code; problems arise mainly in extreme high-throughput/low-latency contexts.
- iostreams are widely disliked; many prefer C-style
printfor newerfmt/<format>APIs. Some say avoiding iostream while still using type-safe formatting is the sane middle ground.
Template metaprogramming and alternatives
- Some celebrate heavy template metaprogramming and functional styles as uniquely powerful, especially with newer constexpr/consteval/concepts.
- Others complain about compilation times and unreadable errors, advocating sparse use.
- Alternatives like Rust, Zig, Nim, D, and “better C” approaches are repeatedly mentioned; when choice is available, several say they’d avoid C++ entirely.