Skip to content

Changes

Version 2.1 (Jan 1, 2026)

  • Migrated source to pandoc-markdown. Produce mkdocs-compatible output. Minor edits.

Version 2.0 (March 6, 2024)

  • Updated for C++20.
    • Don’t use modules or coroutines.
    • Add recommendation to use <numbers>.
    • Suggest using auto to move the return type to the end of a method signature when returning types defined within the class.
    • Suggest not defining template functions without the template keyword.
    • Recommend std::format for formatted output.
    • Note that range-for can have init-statements.
    • Mention std::bit_cast.
    • Recommend using instead of typedef. Rephrase previous references to typedef.
    • Comparisons should be defined in terms of operator== and operator<=>.
    • Mention std::span.
  • Some additional references.
  • Clarify that non-ASCII characters should not be used in identifier names.
  • Clarify that variable-length argument lists of variadic template functions are OK.

Version 0.7 (Sep 18, 2019)

  • Minor cleanups and updates to take into account that we now require C++17.
  • Use the fallthrough attribute, not a comment.
  • Allow omitting the default clause in a switch statement on an enum that handles all possible values. Recent compilers will warn if some values are not handled, and it’s better to get such a diagnostic at compile-time rather than at runtime.
  • Clarify avoid-typedef section.
  • Mention preference for ATH_MSG_ macros.
  • Don’t require override for destructors.
  • Avoid using #pragma once.

Version 0.6 (Dec 20, 2017)

  • The register keyword is an error in C++17.
  • Dynamic exception specifications are errors in C++17.
  • Exceptions should be caught using const references, not by value.
  • Discourage using protected data.

Version 0.5 (Nov 21, 2017)

  • Add an initial set of guidelines for AthenaMT.
  • Add recommendation to prefer range-based for.

Version 0.4 (Nov 16, 2017)

  • Minor updates: we’re now using c++14. Add note about implicit fallthrough warnings with gcc7. Add rule to use std::abs().

Version 0.3 (Aug 23, 2017)

  • Add recommendation to avoid bit fields.

Version 0.2 (Aug 9, 2017)

  • Small typo fixes.
  • Add a brief description of pointer aliasing.
  • Add more details about argument passing to functions.
  • Add recommendation on auto.