Time for C++20.

Vernon Mauery vernon.mauery at linux.intel.com
Thu Apr 15 09:13:13 AEST 2021


On 14-Apr-2021 02:12 PM, Bills, Jason M wrote:
>
>
>On 4/14/2021 1:11 PM, Patrick Williams wrote:
>>Hello.
>>
>>Per [1], as a project we've generally committed to using the latest C++
>>standard.  C++20 was released in early Sept. 2020 and already had pretty
>>decent compiler support at the time it was released.  We're currently
>>using GCC10 and according to [2] it has support for nearly every C++20
>>feature I could see us regularly wanting to use(*).  It seems like it
>>is a reasonable time for us to move on to it.
>>
>>* - Except I recall seeing some mention of std::source_location being
>>     useful to fix some of the issues with phosphor-logging, but that
>>     won't be available until GCC11.

I am excited for this... always having the logging header file's 
location reported is less than useful.

>>In general the C++ standard is backwards compatible.  This shouldn't
>>have any impact if you are writing C++17-only code.  What it allows us
>>to do is to start using features out of C++20 like the spaceship
>>operator and ranges.
>>
>>I've put up some commits to start this process.  So far the only hiccup
>>I've ran into is that you need Meson 0.57.0 or higher in order for it to
>>recognize the 'cpp_std=c++20' option.  I am adding code to our unit-test
>>framework to ensure you have this specified in your `meson.build` if you
>>are requesting C++20.
>>
>>     - https://gerrit.openbmc-project.xyz/c/openbmc/openbmc-build-scripts/+/42252
>>         * Adds some checking to ensure you've specified a meson_version
>>           in your meson.build that can handle C++20.
>>
>>     - https://gerrit.openbmc-project.xyz/c/openbmc/docs/+/42255
>>         * Update C++ style doc from C++17 to C++20.
>>
>>     - https://gerrit.openbmc-project.xyz/c/openbmc/sdbusplus/+/42256
>>         * Update sdbusplus to use C++20.
>>
>>Please let me know if you have any concerns with this upgrade; I'll be
>>surprised if this not a fairly low-contention move.
>+1
>
>I just discovered starts_with() will be available for std::string 
>which I want to use.  I turned it on locally and didn't have any 
>issues.
>
>coroutines are also an interesting possibility for some of our async calls.

The c++ coroutines are implemented differently than the boost::asio 
stuff that ipmid is currently using. It will require some rewriting. But 
I would prefer to move on to the standard than using an older 
implementation from boost.

--Vernon


More information about the openbmc mailing list