<div dir="auto">I support the switch</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 4 Dec 2022 at 16:18, Alex Rousskov <<a href="mailto:rousskov@measurement-factory.com">rousskov@measurement-factory.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
     I propose that we switch master/v6 from C++11 to C++17: Modern <br>
environments support C++17 well. We are wasting significant amounts of <br>
time on emulating such basic C++17 features as std::optional. We are <br>
writing worse code than we can because we lack access to such basic <br>
C++14 and C++17 features as<br>
<br>
* function return type deduction (auto)<br>
* generic lambdas (auto arguments)<br>
* relaxed constexpr restrictions<br>
* std::make_unique<br>
* std::integer_sequence<br>
* std::quoted<br>
* Nested namespace definitions<br>
* [[fallthrough]], [[maybe_unused]], and [[nodiscard]]<br>
* fold expressions<br>
* auto [a, b] = getTwoReturnValues();<br>
* inline variables<br>
* std::any<br>
* std::variant<br>
* std::byte<br>
<br>
If we do not switch now, then we would have to wait about a year for the <br>
next such opportunity because we should not introduce such a big <br>
difference between master and the upcoming unstable v6 branch.<br>
<br>
<br>
C++17 is supported by popular modern compilers and stable distros. Squid <br>
master branch should target those IMO. Even old environments can install <br>
the necessary modern compilers (e.g., RHEL5 users can get them via Red <br>
Hat Developer Toolset).<br>
<br>
* GCC v5 supports most C++17 features.<br>
* GCC v8 supports all relevant C++17 features.<br>
* Clang v5 supports nearly all C++17 features.<br>
* Clang v8 supports all relevant C++17 features.<br>
<br>
* Ubuntu 20.04 LTS ships with GCC v9 and clang v10.<br>
<br>
* <a href="https://gcc.gnu.org/projects/cxx-status.html#cxx17" rel="noreferrer" target="_blank">https://gcc.gnu.org/projects/cxx-status.html#cxx17</a><br>
* <br>
<a href="https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017" rel="noreferrer" target="_blank">https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017</a><br>
* <a href="https://clang.llvm.org/cxx_status.html#cxx17" rel="noreferrer" target="_blank">https://clang.llvm.org/cxx_status.html#cxx17</a><br>
* <a href="https://en.cppreference.com/w/cpp/compiler_support/17" rel="noreferrer" target="_blank">https://en.cppreference.com/w/cpp/compiler_support/17</a><br>
<br>
<br>
Switching to just C++14 would be better than nothing, but it will not <br>
give us several C++17 features that we already waste serious time on <br>
emulating/avoiding (e.g., std::optional). We should not switch to C++20 <br>
yet because modern stable compilers still have some C++20 support holes.<br>
<br>
<br>
I can volunteer the corresponding PR.<br>
<br>
<br>
Any objections to switching master/v6 to C++17?<br>
<br>
<br>
Thank you,<br>
<br>
Alex.<br>
_______________________________________________<br>
squid-dev mailing list<br>
<a href="mailto:squid-dev@lists.squid-cache.org" target="_blank">squid-dev@lists.squid-cache.org</a><br>
<a href="http://lists.squid-cache.org/listinfo/squid-dev" rel="noreferrer" target="_blank">http://lists.squid-cache.org/listinfo/squid-dev</a><br>
</blockquote></div></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">@mobile</div>