libstdc++: Add inline to maybe-constexpr functions (PR 92927)
authorJonathan Wakely <jwakely@redhat.com>
Fri, 20 Dec 2019 17:10:18 +0000 (17:10 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 20 Dec 2019 17:10:18 +0000 (17:10 +0000)
Originally these functions were always inline. I changed them in r277342
to be always constexpr, then in r277588 changed them to be constexpr for
C++14, but I didn't restore the 'inline' for C++11. That leads to linker
errors when libstdc++.so is built unoptimized, because those functions
don't get instantiated in src/c++11/string-inst.o

PR libstdc++/92927
* include/bits/alloc_traits.h (__alloc_on_copy, __alloc_on_move)
(__alloc_on_swap): Add inline specifier.

From-SVN: r279656

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/alloc_traits.h

index 81f7bb9b853dfe2fea292ada22760be522ac8cc4..663312da1e31d63c30bc89e620a21021020a2712 100644 (file)
@@ -1,3 +1,9 @@
+2019-12-20  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/92927
+       * include/bits/alloc_traits.h (__alloc_on_copy, __alloc_on_move)
+       (__alloc_on_swap): Add inline specifier.
+
 2019-12-20  Jerome Lambourg  <lambourg@adacore.com>
 
        * acinclude.m4 (GLIBCXX_CHECK_SETRLIMIT): Test with AC_LANG_CPLUSPLUS.
index 142b23fe00f8e6a10ed219913307e6cd20aeee12..812cff0fabec005d3b9b0efb03be87d4a97f28ee 100644 (file)
@@ -567,7 +567,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   template<typename _Alloc>
-    _GLIBCXX14_CONSTEXPR void
+    _GLIBCXX14_CONSTEXPR inline void
     __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
     {
       typedef allocator_traits<_Alloc> __traits;
@@ -599,7 +599,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   template<typename _Alloc>
-    _GLIBCXX14_CONSTEXPR void
+    _GLIBCXX14_CONSTEXPR inline void
     __alloc_on_move(_Alloc& __one, _Alloc& __two)
     {
       typedef allocator_traits<_Alloc> __traits;
@@ -626,7 +626,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
   template<typename _Alloc>
-    _GLIBCXX14_CONSTEXPR void
+    _GLIBCXX14_CONSTEXPR inline void
     __alloc_on_swap(_Alloc& __one, _Alloc& __two)
     {
       typedef allocator_traits<_Alloc> __traits;