.. _index:

=============================
"libc++" C++ Standard Library
=============================

Overview
========

libc++ is a new implementation of the C++ standard library, targeting C++11.

* Features and Goals

  * Correctness as defined by the C++11 standard.
  * Fast execution.
  * Minimal memory use.
  * Fast compile times.
  * ABI compatibility with gcc's libstdc++ for some low-level features
    such as exception objects, rtti and memory allocation.
  * Extensive unit tests.

* Design and Implementation:

  * Extensive unit tests
  * Internal linker model can be dumped/read to textual format
  * Additional linking features can be plugged in as "passes"
  * OS specific and CPU specific code factored out


Getting Started with libc++
---------------------------

.. toctree::
   :maxdepth: 2

   UsingLibcxx
   BuildingLibcxx
   TestingLibcxx

Current Status
--------------

After its initial introduction, many people have asked "why start a new
library instead of contributing to an existing library?" (like Apache's
libstdcxx, GNU's libstdc++, STLport, etc).  There are many contributing
reasons, but some of the major ones are:

From years of experience (including having implemented the standard
library before), we've learned many things about implementing
the standard containers which require ABI breakage and fundamental changes
to how they are implemented.  For example, it is generally accepted that
building std::string using the "short string optimization" instead of
using Copy On Write (COW) is a superior approach for multicore
machines (particularly in C++11, which has rvalue references).  Breaking
ABI compatibility with old versions of the library was
determined to be critical to achieving the performance goals of
libc++.

Mainline libstdc++ has switched to GPL3, a license which the developers
of libc++ cannot use.  libstdc++ 4.2 (the last GPL2 version) could be
independently extended to support C++11, but this would be a fork of the
codebase (which is often seen as worse for a project than starting a new
independent one).  Another problem with libstdc++ is that it is tightly
integrated with G++ development, tending to be tied fairly closely to the
matching version of G++.

STLport and the Apache libstdcxx library are two other popular
candidates, but both lack C++11 support.  Our experience (and the
experience of libstdc++ developers) is that adding support for C++11 (in
particular rvalue references and move-only types) requires changes to
almost every class and function, essentially amounting to a rewrite.
Faced with a rewrite, we decided to start from scratch and evaluate every
design decision from first principles based on experience.

Further, both projects are apparently abandoned: STLport 5.2.1 was
released in Oct'08, and STDCXX 4.2.1 in May'08.

Platform and Compiler Support
-----------------------------

libc++ is known to work on the following platforms, using gcc-4.2 and
clang  (lack of C++11 language support disables some functionality).
Note that functionality provided by ``<atomic>`` is only functional with clang
and GCC.

============ ==================== ============ ========================
OS           Arch                 Compilers    ABI Library
============ ==================== ============ ========================
Mac OS X     i386, x86_64         Clang, GCC   libc++abi
FreeBSD 10+  i386, x86_64, ARM    Clang, GCC   libcxxrt, libc++abi
Linux        i386, x86_64         Clang, GCC   libc++abi
============ ==================== ============ ========================

The following minimum compiler versions are strongly recommended.

* Clang 3.5 and above
* GCC 4.7 and above.

Anything older *may* work.

C++ Dialect Support
---------------------

* C++11 - Complete
* `C++14 - Complete <cxx14 status_>`__
* `C++1z - In Progress <cxx1z status_>`__
* `Post C++14 Technical Specifications - In Progress <ts status_>`__

.. _cxx14 status: http://libcxx.llvm.org/cxx1y_status.html
.. _cxx1z status: http://libcxx.llvm.org/cxx1z_status.html
.. _ts status: http://libcxx.llvm.org/ts1z_status.html


Notes and Known Issues
----------------------

This list contains known issues with libc++

* Building libc++ with ``-fno-rtti`` is not supported. However
  linking against it with ``-fno-rtti`` is supported.
* On OS X v10.8 and older the CMake option ``-DLIBCXX_LIBCPPABI_VERSION=""``
  must be used during configuration.


A full list of currently open libc++ bugs can be `found here <libcxx bug list_>`__.

.. _libcxx bug list: https://llvm.org/bugs/buglist.cgi?component=All%20Bugs&product=libc%2B%2B&query_format=advanced&resolution=---&order=changeddate%20DESC%2Cassigned_to%20DESC%2Cbug_status%2Cpriority%2Cbug_id&list_id=74184

Design Documents
----------------

* `<atomic> design <http://libcxx.llvm.org/atomic_design.html>`_
* `<type_traits> design <http://libcxx.llvm.org/type_traits_design.html>`_
* `Status of debug mode <http://libcxx.llvm.org/debug_mode.html>`_
* `Notes by Marshall Clow <clow notes_>`__

.. _clow notes: https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/

Getting Involved
================

First please review our `Developer's Policy <http://llvm.org/docs/DeveloperPolicy.html>`__.

**Bug Reports**

If you think you've found a bug in libc++, please report it using
the _`LLVM Bugzilla`. If you're not sure, you
can post a message to the `cfe-dev`_.  mailing list or on IRC.
Please include "libc++" in your subject.

**Patches**

If you want to contribute a patch to libc++, the best place for that is
`Phabricator <phab doc_>`__. Please include [libcxx] in the subject and
add `cfe-commits` as a subscriber.

**Discussion and Questions**

Send discussions and questions to the `clang mailing list <cfe-dev_>`__.
Please include [libcxx] in the subject.

.. _phab doc: http://llvm.org/docs/Phabricator.html
.. _cfe-dev: http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

Links
=====

* `Getting started with LLVM <http://llvm.org/docs/GettingStarted.html>`_
* `libc++abi Homepage <libc++abi_>`__

.. _`libc++abi`: http://libcxxabi.llvm.org/
