| # Extended C++03 Support | |
| :::{contents} | |
| :local: true | |
| ::: | |
| ## Overview | |
| libc++ is an implementation of the C++ standard library targeting C++11 or later. | |
| In C++03, the library implements the C++11 standard using C++11 language extensions provided | |
| by Clang. | |
| This document tracks the C++11 extensions libc++ requires, the C++11 extensions it provides, | |
| and how to write minimal C++11 inside libc++. | |
| ## Required C++11 Compiler Extensions | |
| Clang provides a large subset of C++11 in C++03 as an extension. The features | |
| libc++ expects Clang to provide are: | |
| - Variadic templates. | |
| - RValue references and perfect forwarding. | |
| - Alias templates | |
| - defaulted and deleted Functions. | |
| - reference qualified Functions | |
| - `auto` | |
| There are also features that Clang *does not* provide as an extension in C++03 | |
| mode. These include: | |
| - `constexpr` and `noexcept` | |
| - Trailing return types. | |
| - `>>` without a space. | |
| ## Provided C++11 Library Extensions | |
| :::{warning} | |
| The C++11 extensions libc++ provides in C++03 are currently undergoing change. Existing extensions | |
| may be removed in the future. New users are strongly discouraged depending on these extension | |
| in new code. | |
| This section will be updated once the libc++ developer community has further discussed the | |
| future of C++03 with libc++. | |
| ::: |