Declare some explicit instantiations for strings in Debug Mode
authorJonathan Wakely <jwakely@redhat.com>
Wed, 27 Jun 2018 00:11:53 +0000 (01:11 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 27 Jun 2018 00:11:53 +0000 (01:11 +0100)
The empty reps and the I/O functions do not need to be implicitly
instantiated to enable assertions, so declare the explicit
instantiations when _GLIBCXX_EXTERN_TEMPLATE == -1 (i.e. when
_GLIBCXX_ASSERTIONS is defined).

PR libstdc++/86138
* include/bits/basic_string.tcc: [_GLIBCXX_EXTERN_TEMPLATE < 0]
Declare explicit instantiations of COW empty reps and I/O functions.

From-SVN: r262167

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.tcc

index 6e9ce615a674c1ce97027f4b2acb279c85b69424..0db12be6f8bc0c3dbba185ea4d2e6a3ca8e314d0 100644 (file)
@@ -1,3 +1,9 @@
+2018-06-27  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/86138
+       * include/bits/basic_string.tcc: [_GLIBCXX_EXTERN_TEMPLATE < 0]
+       Declare explicit instantiations of COW empty reps and I/O functions.
+
 2018-06-26  David Edelsohn  <dje.gcc@gmail.com>
 
        * testsuite/experimental/algorithm/sample-2.cc: Add TLS DejaGNU
index 9fbea84c4af32a1fbf0426ada4db5e565895d811..04b68ca0202622577252e8691f7006938f4cc437 100644 (file)
@@ -1597,13 +1597,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   // Inhibit implicit instantiations for required instantiations,
   // which are defined via explicit instantiations elsewhere.
-#if _GLIBCXX_EXTERN_TEMPLATE > 0
+#if _GLIBCXX_EXTERN_TEMPLATE
   // The explicit instantiations definitions in src/c++11/string-inst.cc
   // are compiled as C++14, so the new C++17 members aren't instantiated.
   // Until those definitions are compiled as C++17 suppress the declaration,
   // so C++17 code will implicitly instantiate std::string and std::wstring
   // as needed.
-# if __cplusplus <= 201402L
+# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0
   extern template class basic_string<char>;
 # elif ! _GLIBCXX_USE_CXX11_ABI
   // Still need to prevent implicit instantiation of the COW empty rep,
@@ -1626,7 +1626,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     getline(basic_istream<char>&, string&);
 
 #ifdef _GLIBCXX_USE_WCHAR_T
-# if __cplusplus <= 201402L
+# if __cplusplus <= 201402L && _GLIBCXX_EXTERN_TEMPLATE > 0
   extern template class basic_string<wchar_t>;
 # elif ! _GLIBCXX_USE_CXX11_ABI
   extern template basic_string<wchar_t>::size_type
@@ -1646,7 +1646,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     basic_istream<wchar_t>&
     getline(basic_istream<wchar_t>&, wstring&);
 #endif // _GLIBCXX_USE_WCHAR_T
-#endif // _GLIBCXX_EXTERN_TEMPLATE > 0
+#endif // _GLIBCXX_EXTERN_TEMPLATE
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std