From: Jonathan Wakely Date: Thu, 1 Feb 2024 18:37:34 +0000 (+0000) Subject: libstdc++: Force-inline shared_ptr::operator bool() for C++20 [PR108636] X-Git-Tag: releases/gcc-12.4.0~439 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b36925576d1097b20cddd29cf96c5b9ecfffc3d;p=thirdparty%2Fgcc.git libstdc++: Force-inline shared_ptr::operator bool() for C++20 [PR108636] This avoids a linker error with -fkeep-inline-functions when including . We can't backport the fix from trunk because it adds an export to the shared library. By marking the "missing" symbol always_inline for C++20 mode we don't need a definition in the library. libstdc++-v3/ChangeLog: PR libstdc++/108636 * include/bits/shared_ptr_base.h (__shared_ptr::operator bool): Add always_inline attribute for C++20 and later. --- diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index c22b397a1946..23c3b17d46f9 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -1666,6 +1666,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return _M_ptr; } /// Return true if the stored pointer is not null. +#if __cplusplus >= 202002L + [[__gnu__::__always_inline__]] +#endif explicit operator bool() const noexcept { return _M_ptr != nullptr; }