https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86590
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- As Marc said, the only difference is the explicit instantiation declarations. You'll get the same in C++14 if you disable them: #include <bits/c++config.h> #undef _GLIBCXX_EXTERN_TEMPLATE #include <string> // ... They're only disabled temporarily for C++17 until our C++17 support is stable, at which point we'll start exporting the new C++17 members of std::string from libstdc++.so and re-enable the explicit instantiation declarations. So there's nothing to do here, except wait for that to happen.