https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92927
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- When the functions are not inline they are not instantiated by std::string at -O0: $ nm bad-stage1-src/c++11/string-inst.o | grep on_swap 0000000000000000 W _ZN9__gnu_cxx14__alloc_traitsISaIcEcE10_S_on_swapERS1_S3_ U _ZSt15__alloc_on_swapISaIcEEvRT_S2_ When the functions are inline (either explicitly with the 'inline' keyword or implicitly with 'constexpr') they do get instantiated at -O0: $ nm good-stage1-src/c++11/string-inst.o | grep on_swap 0000000000000000 W _ZN9__gnu_cxx14__alloc_traitsISaIcEcE10_S_on_swapERS1_S3_ 0000000000000000 W _ZSt15__alloc_on_swapISaIcEEvRT_S2_ 0000000000000000 W _ZSt18__do_alloc_on_swapISaIcEEvRT_S2_St17integral_constantIbLb0EE Because those functions aren't explicitly instantiated in src/c++11/string-inst.o they are not present in libstdc++.so when it is compiled with -O0. Before r277342 those functions were always inline. I changed them 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. Fix incoming.