[libcxx-dev] Advancing libc++ Beyond C++03

JF Bastien via libcxx-dev libcxx-dev at lists.llvm.org
Mon Jun 10 15:02:59 PDT 2019



> On Jun 10, 2019, at 1:37 PM, Eric Fiselier via libcxx-dev <libcxx-dev at lists.llvm.org> wrote:
> 
> Hello,
> 
> 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.


Would we break ABI of C++03 using clang as a compiler? Would we only do so for STL features which aren’t actually part of C++03 anyways?


> * 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.
> 
> I would like the communities blessing to officially unsupport GCC in C++03 in the 9.0 release.
> 
> /Eric
> 
> [1] https://gist.github.com/EricWF/83b352471c999655859f75f60c9061a8 <https://gist.github.com/EricWF/83b352471c999655859f75f60c9061a8>
> [2] Clang and GCC are our only "supported" C++03 compilers. MSVC and XLC don't support C++03, we don't support ILC.
> [3] G++03 disallows default template parameters, so SFINAE must be written as default function parameters. Function parameters create live variables, live variables force debug info emission for their type, which emits debug information for the SFINAE construct.
> [4] Unlike C++03 metafunctions written with normal class templates, C++11 alias templates aren't instantiated at every use.
> 
> 
> _______________________________________________
> libcxx-dev mailing list
> libcxx-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libcxx-dev/attachments/20190610/a3a4f278/attachment-0001.html>


More information about the libcxx-dev mailing list