GCC 16 considering changing default to C++20
C++20 as GCC’s Default
- Some welcome GCC 16 moving to C++20 by default, wanting easier access to features like modules without extra flags.
- Others insist serious projects should always pass an explicit
-std=flag, so defaults shouldn’t matter for well-maintained code. - Concern is raised that unpinned legacy projects and deep dependency trees implicitly rely on a stable default and may break when it changes.
Modules Debate
- A strong faction argues C++20 modules are a failed feature: underspecified, implemented ad‑hoc across major compilers, and not robust enough for serious, non‑hobby code.
- It’s noted that the original high‑profile “modules are dead” critique predates standardization, but commenters claim the final standard still lacks a solid, independently implementable spec.
- Counterexamples like Microsoft Office are clarified as using non-standard “header units,” not full C++20 modules, so not evidence of mainstream module adoption.
Standards Support and Backward Compatibility
- People question why not default straight to C++23 or newer; the answer in the linked GCC docs and thread is that support is still incomplete.
- Compatibility concerns center on new keywords and stricter rules making previously valid code fail. There’s disagreement over whether this constitutes “breaking changes”:
- One view: C++ rarely makes truly breaking changes and is strongly backwards compatible.
- Another: changing defaults so old code fails to compile is practically a breaking change, even if technically minor.
Bootstrapping and Self‑Hosting
- Some confusion arises about whether changing the default impacts GCC’s own build; others clarify that GCC’s build uses explicit standard flags, so this is only about user defaults.
- There’s a side debate on bootstrapping and whether using the latest standard complicates self-hosting with older compilers; participants dispute what “requires bootstrapping” actually means.
Rust and Release Cadence Comparison
- A few praise C++’s slower, multi‑year default updates compared to Rust’s rapid evolution, arguing Rust’s culture of always targeting very new compilers complicates distro self‑hosting.
- Others counter that Rust projects can and do pin minimum versions, and that rapid improvements are beneficial rather than inherently problematic.
Anubis / Anime Gateway Tangent
- A large subthread focuses on the anime-style Anubis gateway in front of the GCC mailing list:
- Some find it jarring, unprofessional, or creepy, especially in serious or corporate contexts.
- Others like the playful aesthetic, argue open-source maintainers should prioritize fun over “corporate bland,” and note that the mascot doubles as a funding/branding mechanism (free version keeps the mascot; paid allows custom art).
- Comparisons are made to Cloudflare-style blocks: Anubis is considered less harmful because it still shows page content, though some note performance issues on poor connections.
- There’s a meta-argument about cultural bias toward anime art and whether negative reactions to “anime mascots” reflect broader prejudices.
Coroutines and ABI Concerns
- One commenter wonders whether differing coroutine implementations could break interoperability between GCC and Clang binaries; the question is raised but not substantially resolved in the thread.
Practices and Personal Choices
- Several commenters reiterate they always specify language standards and warning flags (both for C and C++) and consider relying on defaults a bad practice.
- Some developers state they’ll continue using older standards (e.g., C99 or C++03/11) regardless of GCC defaults, prioritizing stability and long-term compatibility over new language features.