Tested x86_64-linux. Pushed to releases/gcc-12 branch. -- >8 --
This avoids a linker error with -fkeep-inline-functions when including <filesystem>. 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. --- libstdc++-v3/include/bits/shared_ptr_base.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index c22b397a194..23c3b17d46f 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; } -- 2.43.0