<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Jun 10, 2019, at 1:37 PM, Eric Fiselier via libcxx-dev <<a href="mailto:libcxx-dev@lists.llvm.org" class="">libcxx-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail-gs" style="margin: 0px; padding: 0px 0px 20px; width: 1264px; font-family: Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-size: inherit;"><div class="gmail-"><div id="gmail-:178" class="gmail-gt gmail-ii" style="font-size:12.8px;direction:ltr;margin:8px 0px 0px;padding:0px"><div id="gmail-:177" class="gmail-a3s gmail-aXjCH" style="overflow:hidden;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:small;line-height:1.5;font-family:Arial,Helvetica,sans-serif"><div dir="ltr" class=""><div class="gmail-gs" style="margin: 0px; padding: 0px 0px 20px; width: 1272px; font-family: Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-size: 12px;"><div class="gmail-"><div id="gmail-:11u" class="gmail-gt gmail-ii" style="font-size:12.8px;direction:ltr;margin:8px 0px 0px;padding:0px"><div id="gmail-:11v" class="gmail-a3s gmail-aXjCH" style="overflow:hidden;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:small;line-height:1.5;font-family:Arial,Helvetica,sans-serif"><div dir="ltr" class=""><div class=""><span style="font-family:"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,Helvetica,sans-serif" class="">Hello,</span></div><div class=""><span style="font-family:"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,Helvetica,sans-serif" class=""><br class=""></span></div><div class=""><span style="font-family:"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,Helvetica,sans-serif" class="">libc++ claims to support GCC with C++03 ("G++03"), and this is a problem for our users.</span></div><div class=""><br class=""></div><div class=""><font face="Lucida Grande, Lucida Sans Unicode, Arial, Verdana, Helvetica, sans-serif" class="">Our C++03 users are all using Clang. They must be.</font><span style="font-family:"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,Helvetica,sans-serif" class="">  Less than 9% of the C++03 tests pass with GCC [1][2]. No non-trivial C++ program could work.</span><br class=""></div><div class=""><br class=""></div><div class=""><span style="font-family:"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,Helvetica,sans-serif" class="">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::</span></div><div class=""><span style="font-family:"Lucida Grande","Lucida Sans Unicode",Arial,Verdana,Helvetica,sans-serif" class=""><br class=""></span></div><div class=""><div class="">* Improve Correctness:</div></div><div class=""><br class=""></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px" class=""><div class=""><div class="">Every `#ifdef _LIBCPP_HAS_NO_<C++11-feature>` is a bug manifest. It exists to admit for deviant semantics.</div></div><div class=""><br class=""></div></blockquote><div class=""><div class="">* Achieve ABI stability between C++03 and C++11</div></div><div class=""><br class=""></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px" class=""><div class=""><div class="">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.</div></div></blockquote></div></div></div></div></div></div></div></div></div></div></div></div></blockquote><div><br class=""></div><div><br class=""></div><div>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?</div><div><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail-gs" style="margin: 0px; padding: 0px 0px 20px; width: 1264px; font-family: Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-size: inherit;"><div class="gmail-"><div id="gmail-:178" class="gmail-gt gmail-ii" style="font-size:12.8px;direction:ltr;margin:8px 0px 0px;padding:0px"><div id="gmail-:177" class="gmail-a3s gmail-aXjCH" style="overflow:hidden;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:small;line-height:1.5;font-family:Arial,Helvetica,sans-serif"><div dir="ltr" class=""><div class="gmail-gs" style="margin: 0px; padding: 0px 0px 20px; width: 1272px; font-family: Roboto, RobotoDraft, Helvetica, Arial, sans-serif; font-size: 12px;"><div class="gmail-"><div id="gmail-:11u" class="gmail-gt gmail-ii" style="font-size:12.8px;direction:ltr;margin:8px 0px 0px;padding:0px"><div id="gmail-:11v" class="gmail-a3s gmail-aXjCH" style="overflow:hidden;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:small;line-height:1.5;font-family:Arial,Helvetica,sans-serif"><div dir="ltr" class="">* Decrease Compile Times and Memory Usage:<div class=""><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px" class=""><div class=""><br class=""></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px" class="">Writing efficient SFINAE requires C++11. Using alias templates, libc++ could reduce the number of instantiations it produces substantially.<br class=""><br class=""></blockquote>* Decrease Binary Size</div><div class=""><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px" class=""><div class=""><br class=""></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px" class=""><div class="">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.</div></blockquote><br class=""></div><div class="">I would like the communities blessing to officially unsupport GCC in C++03 in the 9.0 release.</div><div class=""><br class=""></div><div class="">/Eric</div><div class=""><div class=""><div class=""><div class=""><br class=""></div><div class="">[1] <a href="https://gist.github.com/EricWF/83b352471c999655859f75f60c9061a8" target="_blank" class="">https://gist.github.com/EricWF/83b352471c999655859f75f60c9061a8</a></div></div></div></div><div class="">[2] Clang and GCC are our only "supported" C++03 compilers. MSVC and XLC don't support C++03, we don't support ILC.</div><div class="">[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.</div><div class="">[4] Unlike C++03 metafunctions written with normal class templates, C++11 alias templates aren't instantiated at every use.</div></div><div class="gmail-yj6qo"></div><div class="gmail-adL"></div></div></div><div class="gmail-hi" style="border-bottom-left-radius:1px;border-bottom-right-radius:1px;padding:0px;width:auto;background:rgb(242,242,242);margin:0px"></div></div></div><br class=""><br class="gmail-Apple-interchange-newline"></div></div></div></div></div></div>
_______________________________________________<br class="">libcxx-dev mailing list<br class=""><a href="mailto:libcxx-dev@lists.llvm.org" class="">libcxx-dev@lists.llvm.org</a><br class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev<br class=""></div></blockquote></div><br class=""></body></html>