
====================
Libc++ ABI stability
====================

Libc++ aims to preserve stable ABI to avoid subtle bugs when code built to the old ABI
is linked with the code build to the new ABI. At the same time, libc++ allows ABI-breaking
improvements and bugfixes for the scenarios when ABI change is not a issue.

To support both cases, libc++ allows specifying the ABI version at the
build time.  The version is defined with a cmake option
LIBCXX_ABI_VERSION. Another option LIBCXX_ABI_UNSTABLE can be used to
include all present ABI breaking features. These options translate
into C++ macro definitions _LIBCUDACXX_ABI_VERSION, _LIBCUDACXX_ABI_UNSTABLE.

Any ABI-changing feature is placed under it's own macro, _LIBCUDACXX_ABI_XXX, which is enabled
based on the value of _LIBCUDACXX_ABI_VERSION. _LIBCUDACXX_ABI_UNSTABLE, if set, enables all features at once.
