mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-04 14:36:02 +08:00
libstdc++: Make std::type_info::operator== always_inline for C++23 [PR110572]
Commit r12-6266-g3633cc54284450 implemented P1328 for C++23, making std::type_info::operator== usable in constant expressions. For targets such as mingw-w64 where that function was not previously inline, making it constexpr required making it inline for C++23 and later. For statically linked programs this can result in multiple definition errors, because there's a non-inline definition in libstdc++.a as well. For those targets make it always_inline for C++23, so that there is no symbol generated for the inline definition, and the non-inline definition in libstdc++.a will be the only definition. libstdc++-v3/ChangeLog: PR libstdc++/110572 * libsupc++/typeinfo (type_info::operator==): Add always_inline attribute for targets where the ABI requries equality to be non-inline. * testsuite/18_support/type_info/110572.cc: New test.
This commit is contained in:
parent
161efd6774
commit
6af8d8e618
@ -188,6 +188,9 @@ namespace std
|
||||
#endif
|
||||
|
||||
#if __GXX_TYPEINFO_EQUALITY_INLINE || __cplusplus > 202002L
|
||||
# if ! __GXX_TYPEINFO_EQUALITY_INLINE
|
||||
[[__gnu__::__always_inline__]]
|
||||
# endif
|
||||
_GLIBCXX23_CONSTEXPR inline bool
|
||||
type_info::operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT
|
||||
{
|
||||
|
11
libstdc++-v3/testsuite/18_support/type_info/110572.cc
Normal file
11
libstdc++-v3/testsuite/18_support/type_info/110572.cc
Normal file
@ -0,0 +1,11 @@
|
||||
// { dg-options "-static-libstdc++" }
|
||||
// { dg-require-static-libstdcxx }
|
||||
// { dg-require-cpp-feature-test __cpp_rtti }
|
||||
// { dg-do link }
|
||||
|
||||
#include <typeinfo>
|
||||
|
||||
int main()
|
||||
{
|
||||
return typeid(0) == typeid(0u);
|
||||
}
|
Loading…
Reference in New Issue
Block a user