• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2          "http://www.w3.org/TR/html4/strict.dtd">
3<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
4<html>
5<head>
6  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
7  <title>"libc++" C++ Standard Library</title>
8  <link type="text/css" rel="stylesheet" href="menu.css">
9  <link type="text/css" rel="stylesheet" href="content.css">
10</head>
11
12<body>
13<div id="menu">
14  <div>
15    <a href="https://llvm.org/">LLVM Home</a>
16  </div>
17
18  <div class="submenu">
19    <label>libc++ Info</label>
20    <a href="/index.html">About</a>
21  </div>
22
23  <div class="submenu">
24    <label>Quick Links</label>
25    <a href="https://libcxxabi.llvm.org/">libc++abi</a>
26    <a href="https://lists.llvm.org/mailman/listinfo/libcxx-dev">libcxx-dev</a>
27    <a href="https://lists.llvm.org/mailman/listinfo/libcxx-commits">libcxx-commits</a>
28    <a href="https://bugs.llvm.org/">Bug Reports</a>
29    <a href="https://llvm.org/svn/llvm-project/libcxx/trunk/">Browse SVN</a>
30    <a href="https://llvm.org/viewvc/llvm-project/libcxx/trunk/">Browse ViewVC</a>
31  </div>
32</div>
33
34<div id="content">
35  <!--*********************************************************************-->
36  <h1>"libc++" C++ Standard Library</h1>
37  <!--*********************************************************************-->
38
39  <p>libc++ is an implementation of the C++ standard library, targeting
40     C++11, C++14 and above.</p>
41
42  <p>All of the code in libc++ is <a
43     href="https://llvm.org/docs/DeveloperPolicy.html#license">dual licensed</a>
44     under the MIT license and the UIUC License (a BSD-like license).</p>
45
46  <!--=====================================================================-->
47  <h2>New Documentation Coming Soon!</h2>
48  <!--=====================================================================-->
49
50  <p> Looking for documentation on how to use, build and test libc++? If so
51      checkout the new libc++ documentation.</p>
52
53  <p><a href="https://libcxx.llvm.org/docs/">
54      Click here for the new libc++ documentation.</a></p>
55
56  <!--=====================================================================-->
57  <h2 id="goals">Features and Goals</h2>
58  <!--=====================================================================-->
59
60    <ul>
61        <li>Correctness as defined by the C++11 standard.</li>
62        <li>Fast execution.</li>
63        <li>Minimal memory use.</li>
64        <li>Fast compile times.</li>
65        <li>ABI compatibility with gcc's libstdc++ for some low-level features
66            such as exception objects, rtti and memory allocation.</li>
67        <li>Extensive unit tests.</li>
68    </ul>
69
70  <!--=====================================================================-->
71  <h2 id="why">Why a new C++ Standard Library for C++11?</h2>
72  <!--=====================================================================-->
73
74  <p>After its initial introduction, many people have asked "why start a new
75     library instead of contributing to an existing library?" (like Apache's
76     libstdcxx, GNU's libstdc++, STLport, etc).  There are many contributing
77     reasons, but some of the major ones are:</p>
78
79  <ul>
80  <li><p>From years of experience (including having implemented the standard
81      library before), we've learned many things about implementing
82      the standard containers which require ABI breakage and fundamental changes
83      to how they are implemented.  For example, it is generally accepted that
84      building std::string using the "short string optimization" instead of
85      using Copy On Write (COW) is a superior approach for multicore
86      machines (particularly in C++11, which has rvalue references).  Breaking
87      ABI compatibility with old versions of the library was
88      determined to be critical to achieving the performance goals of
89      libc++.</p></li>
90
91  <li><p>Mainline libstdc++ has switched to GPL3, a license which the developers
92      of libc++ cannot use.  libstdc++ 4.2 (the last GPL2 version) could be
93      independently extended to support C++11, but this would be a fork of the
94      codebase (which is often seen as worse for a project than starting a new
95      independent one).  Another problem with libstdc++ is that it is tightly
96       integrated with G++ development, tending to be tied fairly closely to the
97       matching version of G++.</p>
98    </li>
99
100  <li><p>STLport and the Apache libstdcxx library are two other popular
101      candidates, but both lack C++11 support.  Our experience (and the
102      experience of libstdc++ developers) is that adding support for C++11 (in
103      particular rvalue references and move-only types) requires changes to
104      almost every class and function, essentially amounting to a rewrite.
105      Faced with a rewrite, we decided to start from scratch and evaluate every
106      design decision from first principles based on experience.</p>
107
108      <p>Further, both projects are apparently abandoned: STLport 5.2.1 was
109      released in Oct'08, and STDCXX 4.2.1 in May'08.</p>
110
111    </ul>
112
113  <!--=====================================================================-->
114  <h2 id="requirements">Platform Support</h2>
115  <!--=====================================================================-->
116
117  <p>
118    libc++ is known to work on the following platforms, using g++ and
119    clang. Note that functionality provided by &lt;atomic&gt; is only functional with
120    clang.
121  </p>
122
123  <ul>
124    <li>Mac OS X i386</li>
125    <li>Mac OS X x86_64</li>
126    <li>FreeBSD 10+ i386</li>
127    <li>FreeBSD 10+ x86_64</li>
128    <li>FreeBSD 10+ ARM</li>
129    <li>Linux i386</li>
130    <li>Linux x86_64</li>
131  </ul>
132
133  <!--=====================================================================-->
134  <h2 id="dir-structure">Current Status</h2>
135  <!--=====================================================================-->
136
137   <p>libc++ is a 100% complete C++11 implementation on Apple's OS X. </p>
138   <p>LLVM and Clang can self host in C++ and C++11 mode with libc++ on Linux.</p>
139   <p>libc++ is also a 100% complete C++14 implementation. A list of new features and
140      changes for C++14 can be found <a href="cxx1y_status.html">here</a>.</p>
141   <p>libc++'s C++17 implementation is not yet complete. A list of features and changes
142      for C++17 can be found <a href="cxx1z_status.html">here</a>.</p>
143   <p>A list of features and changes for the next C++ standard, known here as
144      "C++2a" (probably to be C++20) can be found <a href="cxx2a_status.html">here</a>.</p>
145   <p>Implementation of the post-C++14 Technical Specifications is in progress. A list of features
146      and the current status of these features can be found <a href="ts1z_status.html">here</a>.</p>
147   <p>As features get moved from the Technical Specifications into the main standard, we
148      will (after a period for migration) remove them from the TS implementation. This
149      process is detailed <a href="TS_deprecation.html">here</a>.</p>
150
151   <!--======================================================================-->
152   <h2 id="buildbots">Build Bots</h2>
153   <!--======================================================================-->
154   <p>The latest libc++ build results can be found at the following locations.</p>
155   <ul>
156      <li><a href="http://lab.llvm.org:8011/console">
157        Buildbot libc++ builders
158      </a></li>
159      <li><a href="http://lab.llvm.org:8080/green/view/Libcxx/">
160        Jenkins libc++ builders
161      </a></li>
162    </ul>
163
164  <!--=====================================================================-->
165  <h2>Get it and get involved!</h2>
166  <!--=====================================================================-->
167
168  <p>First please review our
169     <a href="https://llvm.org/docs/DeveloperPolicy.html">Developer's Policy</a>.
170
171    The documentation for building and using libc++ can be found below.
172    <ul>
173      <li><a href="https://libcxx.llvm.org/docs/UsingLibcxx.html">
174        <b>Using libc++</b></a>
175          Documentation on using the library in your programs</li>
176      <li><a href="https://libcxx.llvm.org/docs/BuildingLibcxx.html">
177        <b>Building libc++</b></a>
178          Documentation on building the library using CMake</li>
179      <li><a href="https://libcxx.llvm.org/docs/TestingLibcxx.html">
180        <b>Testing libc++</b></a>
181          Documentation for developers wishing to test the library</li>
182    </ul>
183
184  <!--=====================================================================-->
185  <h3>Notes and Known Issues</h3>
186  <!--=====================================================================-->
187
188  <p>
189    <ul>
190      <li>
191        Building libc++ with <code>-fno-rtti</code> is not supported. However
192        linking against it with <code>-fno-rtti</code> is supported.
193      </li>
194      <li>
195        On OS X v10.8 and older the CMake option
196        <code>-DLIBCXX_LIBCPPABI_VERSION=""</code> must be used during
197        configuration.
198      </li>
199    </ul>
200  </p>
201
202  <p>Send discussions to the
203    <a href="https://lists.llvm.org/mailman/listinfo/libcxx-dev">libc++ mailing list</a>.</p>
204
205  <!--=====================================================================-->
206  <h2>Bug reports and patches</h2>
207  <!--=====================================================================-->
208
209  <p>
210  If you think you've found a bug in libc++, please report it using
211  the <a href="https://bugs.llvm.org/">LLVM Bugzilla</a>. If you're not sure, you
212  can post a message to the <a href="https://lists.llvm.org/mailman/listinfo/libcxx-dev">libcxx-dev</a>
213  mailing list or on IRC.
214  </p>
215
216  <p>
217  If you want to contribute a patch to libc++, the best place for that is
218  <a href="https://llvm.org/docs/Phabricator.html">Phabricator</a>. Please
219  add libcxx-commits as a subscriber.
220  </p>
221
222  <!--=====================================================================-->
223  <h2>Design Documents</h2>
224  <!--=====================================================================-->
225
226<ul>
227<li><a href="atomic_design.html"><tt>&lt;atomic&gt;</tt></a></li>
228<li><a href="type_traits_design.html"><tt>&lt;type_traits&gt;</tt></a></li>
229<li><a href="https://cplusplusmusings.wordpress.com/2012/07/05/clang-and-standard-libraries-on-mac-os-x/">Excellent notes by Marshall Clow</a></li>
230</ul>
231
232</div>
233</body>
234</html>
235