On 07/01/2024 17:34, Jonathan Wakely wrote:
On Sun, 7 Jan 2024 at 12:57, François Dumont <frs.dum...@gmail.com> wrote:
Hi

While working on the patch to use the cxx11 abi in gnu version namespace
mode I got a small problem with this missing constructor. I'm not sure
that the main patch will be integrated in gcc 14 so I think it is better
if I propose this patch independently.

      libstdc++: Add __cow_string constructor from C string

      The __cow_string is instantiated from a C string in
cow-stdexcept.cc. At the moment
      the constructor from std::string is being used with the drawback of
an intermediate
      potential allocation/deallocation and copy. With the C string
constructor we bypass
      all those operations.
But in that file, the std::string is the COW string, which means that
when we construct a std::string and copy it, it's cheap. It's just a
reference count increment/decrement. There should be no additional
allocation or deallocation.

Good remark but AFAI understand in this case std::string is the cxx11 one. I'll take a second look.

Clearly in my gnu version namespace patch it is the cxx11 implementation.

Even if so, why do we want to do those additional operations ? Adding this C string constructor will make sure that no useless operations will be done.


Am I missing something?


      libstdc++-v3/ChangeLog:

              * include/std/stdexcept (__cow_string(const char*)): New
definition.
              * src/c++11/cow-stdexcept.cc (__cow_string(const char*)):
New definition and
              declaration.

Tested under Linux x64, ok to commit ?

François

Reply via email to