https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60936
--- Comment #11 from __vic <d.v.a at ngs dot ru> --- Main problem hides in src/c++11/cow-string-inst.cc here: namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION // These came from c++98/misc-inst.cc, repeat them for COW string // string related to iostreams. template basic_istream<char>& operator>>(basic_istream<char>&, string&); template basic_ostream<char>& operator<<(basic_ostream<char>&, const string&); template basic_istream<char>& getline(basic_istream<char>&, string&, char); template basic_istream<char>& getline(basic_istream<char>&, string&); _GLIBCXX_END_NAMESPACE_VERSION } // namespace It pulls all iostream + locale. On the whole, dependences between objects within libstdc++ a organized terribly. When I just use std::string almost all lib will be linked into my binary!!! If I remove snippet mentioned above + apply fix from Comment 9 this set of objects is linked: condition_variable.o cow-stdexcept.o cow-string-inst.o eh_throw.o functexcept.o functional.o futex.o future.o ios_failure.o regex.o stdexcept.o string-inst.o system_error.o WHY?! I just want std::string! I use no futures, no regex, no ios::failure, etc... Is all this stuff realy necessary for my trivial program?