The pw_polyfill module backports new C++ features to older C++ standards. When possible, features are adapted to work with in standards as old as C++11. Pigweed does not support C++ standards older than C++11.

Backport new C++ features to older C++ standards

The main purpose of pw_polyfill is to bring new C++ library and language features to older C++ standards. No additional #include statements are required to use these features; simply write code assuming that the features are available. This implicit feature backporting is provided through the overrides library in the pw_polyfill module. GN automatically adds this library as a dependency in pw_source_set.

pw_polyfill backports C++ library features by wrapping the standard C++ and C headers. The wrapper headers include the original header using #include_next, then add missing features. The backported features are only defined if they aren’t provided by the standard header, so pw_polyfill is safe to use when compiling with any standard C++11 or newer.

Language features are backported or stubbed via the pw_polyfill/language_features.h header. This header is included in files that depend on pw_polyfill with GCC’s -include option so that no #include statement is required.

The wrapper headers are in public_overrides. These are provided through the "$dir_pw_polyfill:overrides" library, which the GN build adds as a dependency for all targets. To apply overrides in Bazel or CMake, depend on the //pw_polyfill:overrides or pw_polyfill.overrides targets. In other build systems, add pw_polyfill/standard_library_public and pw_polyfill/public_overrides as include paths, and add a -include option for the language_features.h header.

Backported features



Level of support

Feature test macro











full; some operators not constexpr in C++11



std::data, std::size




*_t trait aliases

partial (can expand as needed)







std::integer_sequence & helpers



(language feature)

consteval keyword

ignored (equivalent to constexpr)


(language feature)

constinit keyword

supported in clang; ignored in GCC


(language feature)

static_assert with no message



Adapt code to compile with different versions of C++

pw_polyfill provides features for adapting to different C++ standards when pw_polyfill:overrides’s automatic backporting is insufficient:

  • pw_polyfill/standard.h – provides a macro for checking the C++ standard

  • pw_polyfill/language_feature_macros.h – provides macros for adapting code to work with or without newer language features

In GN, Bazel, or CMake, depend on $dir_pw_polyfill, //pw_polyfill, or pw_polyfill, respectively, to access these features. In other build systems, add pw_polyfill/standard_library_public and pw_polyfill/public_overrides as include paths.