libstdc++: Inline all basic_string::compare overloads [PR59048]
authorJonathan Wakely <jwakely@redhat.com>
Tue, 14 Jun 2022 13:54:27 +0000 (14:54 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 14 Jun 2022 20:07:47 +0000 (21:07 +0100)
commit1b65779f46f16b4fffd0591f5e58722c1e7cde8d
treec366f92a62fb159b814f0c254df0f0f8a1ad0847
parent29da01709facbcc7efef4fd6767660d417f44531
libstdc++: Inline all basic_string::compare overloads [PR59048]

Defining the compare member functions inline allows calls to
traits_type::length and std::min to be inlined, taking advantage of
constant expression arguments. When not inline, the compiler prefers to
use the explicit instantiation definitions in libstdc++.so and can't
take advantage of constant arguments.

libstdc++-v3/ChangeLog:

PR libstdc++/59048
* include/bits/basic_string.h (compare): Define inline.
* include/bits/basic_string.tcc (compare): Remove out-of-line
definitions.
* include/bits/cow_string.h (compare): Define inline.
* testsuite/21_strings/basic_string/operations/compare/char/3.cc:
New test.
libstdc++-v3/include/bits/basic_string.h
libstdc++-v3/include/bits/basic_string.tcc
libstdc++-v3/include/bits/cow_string.h
libstdc++-v3/testsuite/21_strings/basic_string/operations/compare/char/3.cc [new file with mode: 0644]