This library provides polyfills for different versions of the standard library.

Constructs are withing namespaces for each specific version, such as “cpp17, cpp20”.

Polyfills will only be used when the standard version is not available.

In some cases, some free functions may be provided. These functions fill gaps of classes that are extended in later iterations of the standard (e.g. std::string_view::starts_with). In the above example, std::string_view polyfill would live in cpp17::string_view and a free function should exist in cpp20::starts_with(std::string_view, prefix).

The library has a set of macros for testing or enforcing different conditions. All that is required is for this symbols to be defined.

  • LIB_STDCOMPAT_USE_POLYFILLS : Will pick polyfill implementation over std.

  • LIB_STDCOMPAT_NO_INLINE_VARIABLES: Uses stdcompat alternative for inline variables.