Skip to content

v1.9.0

Latest

Choose a tag to compare

@federico-busato federico-busato released this 06 Jan 17:23
· 7 commits to master since this release

Main Changes

  • Two new chapters related to build aspects: Build Size and Build Time.
  • Reorganized "Basic Concepts II" into two chapters, splitting integer and floating-point topics.

Full Changelog

Preparation:

  • Improved IDE/Editor section, added cursor and void.
  • Added C++ standard adoption (JetBrains Developer Ecosystem).
  • Listed C++ main conferences.

Basic Concepts I:

  • Improved "Implicit Promotion" section.
  • Added special cases for ! and bitwise shift promotion.
  • Fixed wrong case of undefined behavior in function evaluation.
  • Added float128 in the list of floating-point types.
  • Added numeric_limits example.
  • Specified two's complement in C++ for signed integer types.
  • Slightly improved the "Language Types" section organization.

Basic Concepts II - Integer Types:

  • Fixed usage of z suffix.
  • Added two small examples of undefined behavior.
  • Improved "Arithmetic Types - Promotion and Conversion Rules" section.
  • Slightly improved int/unisgned properties.
  • Improved "Undefined Behavior of Signed Integer" section.

Basic Concepts II - Floating-Point Types:

  • Improved "IEEE floating-point and C++" introduction.
  • Fixed "Inf Behavior" that leads to NaN (Special Values Behavior).
  • Updated IEEE754 visualization and converter links.

Basic Concepts IV:

  • Improved description of attributes for lambda expressions.
  • Further clarification of constexpr evaluation.
  • Added [[indeterminate]] attribute.

Basic Concepts V:

  • Added the alignof operator and improved the sizeof section.
  • Added C++26 constexpr relaxation.
  • Added a section for constexpr objects.
  • Fixed wrong structure size in [[no_unique_address]] section.
  • Improved "Structure initialization - brace or equal" section.
  • Added a section "Fixed-Size Arrays".

Basic Concepts VI:

  • Added an example of C++23 lambda with the static call operator.
  • Explained how a lambda is translated into a function object.
  • Explained lambda trailing return type.
  • Explained the introduction of a new variable in the capture list of a lambda.
  • Improved constexpr lambda explanation in C++17.
  • Provided a better solution for "Preprocessing - Common Error 2".
  • Improved the "Macro" section.

Object-Oriented Programming I:

  • Improved "Defaulted Constructors, Destructor, and Operators" section.
  • Clarified noexcept behavior with defaulted = default methods.

Object-Oriented Programming II:

  • Explained C++20 operator!= overloading behavior.

Templates and Meta-programming I:

  • Described the difference between decltype(T{}+R{}) vs. std::common_type.

Templates and Meta-programming II:

  • Found a better way to resolve CTAD limitations.

Translation Units I:

  • Improved "Linkage" introduction.
  • Added a small section "Declarations and Definitions in Header and Source Files".
  • Described symbol visibility.

Code Conventions II:

  • Added "Literal" section.

Debugging:

  • Created a new section for "Static Analyzers".
  • Added results for "Static Analysis Tools Effectiveness".
  • Added NASA IKOS static analyzer.
  • Improved "C++ standard library hardening" section.
  • Added Google result for standard library hardening.
  • Added Microsoft STL hardening.
  • Added clang safe buffer programming model.
  • Added a study related to the impact of compiler warnings.
  • Created a new section "Code Complexity".
  • Added Debian test case for cppcheck.
  • Added -ftrapv flag to prevent undefined behavior.
  • Added "Type Sanitizer" section.
  • Added "Contracts" section.
  • Improved "Overview" and "Assertions" sections.
  • Added Cpptrace and Backward libraries.
  • Added reference to MSVC AddressSanitizer.

Ecosystem:

  • Removed cloc, added tokei and scc.
  • Added compiler-explorer features and extended its description.
  • Added SourceTrail - Project Visualization.
  • Added Mr.Docs.
  • Added AST diff.
  • Added ast-grep.

Utilities:

  • Added "C++ Views" introduction.
  • Added std::mdspan.
  • Significantly improved std::span section.
  • Added "True Random Number Generator (TRNG)" description.

Iterators, Containers, Algorithms:

  • Described pro/cons of using std::array instead of raw arrays.

Advanced Topics II:

  • Mentioned C++26 rule that disallows binding a returned reference to a temporary.

Optimizations I:

  • Added "Amazon PageSpeed" case.

Optimizations II:

  • Improved "Inlining" description.
  • Described function inlining warning -Winline.
  • Added "one-character commit" (Meta) case study.
  • Improved "Pure" and "Constant" functions section.
  • Improved "Exception" effects on performance.
  • Added constexpr vs. static constexpr.

Optimization III:

  • Added "Automatic Feedback-Directed Optimization (AutoFDO)" description.
  • Added "Compiler Optimization Remarks" description.
  • Added "Compression Libraries".
  • Improved "Performance Benchmarking" section.
  • Added "Program Memory Layout compiler options".
  • Improved "Architecture Flags" section.
  • Added VS2026 performance improvement.

Thanks for all feedback and contributions: @ValentinoGuerrini, @nicolaszzhao, @bnbolo, @lingeandrea, @eddelbuettel, @leofracca, @mmorawiec, @linesight, @alarxx, @fdila, @bitorangej, @roshankarande, @hsunchiu, @c02y.

Special thanks to @oleksandr-pavlyk and @krzysztofkortas for many opened issues.