[libcxx-commits] [PATCH] D63154: Make GCC in C++03 Unsupported
Eric Fiselier via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Jun 11 11:15:07 PDT 2019
EricWF created this revision.
EricWF added reviewers: ldionne, mclow.lists.
Herald added subscribers: libcxx-commits, arphaman, dexonsmith, aprantl.
This patch make G++03 explicitly unsupported with libc++, as discussed on the mailing lists.
Below is the rational for this decision.
----------------------------------------
libc++ claims to support GCC with C++03 ("G++03"), and this is a problem for our users.
Our C++03 users are all using Clang. They must be. Less than 9% of the C++03 tests pass with GCC [1][2]. No non-trivial C++ program could work.
Attempting to support G++03 impacts our QoI considerably. Unlike Clang, G++03 offers almost no C++11 extensions. If we could remove all the fallbacks for G++03, it would mean libc++ could::
- Improve Correctness:
Every `#ifdef _LIBCPP_HAS_NO_<C++11-feature>` is a bug manifest. It exists to admit for deviant semantics.
- Achieve ABI stability between C++03 and C++11
Differences between our C++03 and C++Rest branches contain ABI bugs. For example `std::nullptr_t` and `std::function::operator()(...)` are currently incompatible between C++11 and C++03, but could be fixed.
- Decrease Compile Times and Memory Usage:
Writing efficient SFINAE requires C++11. Using alias templates, libc++ could reduce the number of instantiations it produces substantially.
- Decrease Binary Size
Similar to the last point, G++03 forces metaprogramming techniques that emit more debug information [3] [4]. Compared to libstdc++, debug information size increases of +10% are not uncommon.
Repository:
rCXX libc++
https://reviews.llvm.org/D63154
Files:
docs/index.rst
include/__config
Index: include/__config
===================================================================
--- include/__config
+++ include/__config
@@ -187,6 +187,10 @@
#define _LIBCPP_CLANG_VER 0
#endif
+#if defined(_LIBCPP_COMPILER_GCC) && __cplusplus < 201103L
+#error "libc++ does not support using GCC with C++03. Please enable C++11"
+#endif
+
// FIXME: ABI detection should be done via compiler builtin macros. This
// is just a placeholder until Clang implements such macros. For now assume
// that Windows compilers pretending to be MSVC++ target the Microsoft ABI,
Index: docs/index.rst
===================================================================
--- docs/index.rst
+++ docs/index.rst
@@ -101,9 +101,9 @@
The following minimum compiler versions are strongly recommended.
* Clang 3.5 and above
-* GCC 4.7 and above.
+* GCC 5.0 and above.
-Anything older *may* work.
+The C++03 dialect is only supported for Clang compilers.
C++ Dialect Support
---------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63154.204119.patch
Type: text/x-patch
Size: 986 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20190611/133fc589/attachment-0001.bin>
More information about the libcxx-commits
mailing list