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 auto is widely defended as readable and less error-prone than iterator boilerplate.
  • Critics say auto obscures types in code reviews and diffs; proponents reply that type inference is standard in many languages and IDEs solve this.
  • Banning RTTI and dynamic_cast is 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 even std::vector for 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 printf or newer fmt/<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.