| .. _chapter-pw-polyfill: |
| |
| .. default-domain:: cpp |
| |
| .. highlight:: sh |
| |
| ----------- |
| pw_polyfill |
| ----------- |
| The ``pw_polyfill`` module backports C++17 features to C++11 and C++14. |
| |
| Compatibility |
| ============= |
| C++11 |
| |
| Features |
| ======== |
| |
| Adapt code to compile with older versions of C++ |
| ------------------------------------------------ |
| The ``pw_polyfill`` module provides features for adapting C++17 code to work |
| when compiled with older C++ standards. |
| |
| - ``pw_polyfill/standard.h`` -- provides a macro for checking the C++ standard |
| - ``pw_polyfill/language_features.h`` -- provides macros for adapting code to |
| work without newer language features |
| - ``pw_polyfill/standard_library/`` -- adapters for C++ standard library |
| features, such as ``std::byte``, ``std::size``/``std::data``, and type |
| traits convenience aliases |
| |
| In GN, Bazel, or CMake, depend on ``$dir_pw_polyfill``, ``//pw_polyfill``, |
| or ``pw_polyfill``, respectively. In other build systems, add |
| ``pw_polyfill/standard_library_public`` and ``pw_polyfill/public_overrides`` as |
| include paths. |
| |
| Override C++ standard library headers |
| ------------------------------------- |
| The headers in ``public_overrides`` provide wrappers for C++ standard library |
| headers, including ``<cstddef>``, ``<iterator>``, ``<type_traits>``. These are |
| provided through the ``"$dir_pw_polyfill:overrides"`` library, which the GN |
| build adds as a dependency for all targets. This makes some C++17 library |
| features available to targets compiled with older C++ standards, without needing |
| to change the code. |
| |
| 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. |