[Bug libstdc++/83127] New: Missing overload for operator << of std::stringstream for old ABI
ghjghj530-bubu at yahoo dot de
gcc-bugzilla@gcc.gnu.org
Thu Nov 23 11:24:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83127
Bug ID: 83127
Summary: Missing overload for operator << of std::stringstream
for old ABI
Product: gcc
Version: 6.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: ghjghj530-bubu at yahoo dot de
Target Milestone: ---
Compiling the following testcode
#include <string>
#include <sstream>
void Main(void)
{
std::string testStr("Hello");
std::string testStr2("World");
std::stringstream ss;
ss << testStr;
testStr2 = ss.str();
}
with flag: -D_GLIBCXX_USE_CXX11_ABI=0 leads to linker error:
undefined reference to `std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <char, std::char_traits<char>, std::allocator<char>
>(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)'
Setting -D_GLIBCXX_USE_CXX11_ABI=1 fixes the bug.
We narrowed the problem down to a missing overload in libstdc++.a using:
nm.exe -gC "libstdc++.a" > libstdc++.a.out
There is only one overload for operator << and string:
"std::__cxx11::basic_string"
00000000 W std::basic_ostream<char, std::char_traits<char> >& std::operator<<
<char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char,
std::char_traits<char> >&, std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)
But two overloads for operator >>:
"std::__cxx11::basic_string" and "std::basic_string"
00000000 W std::basic_istream<wchar_t, std::char_traits<wchar_t> >&
std::operator>><wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
>(std::basic_istream<wchar_t, std::char_traits<wchar_t> >&,
std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>,
std::allocator<wchar_t> >&)
00000000 W std::basic_istream<wchar_t, std::char_traits<wchar_t> >&
std::operator>><wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
>(std::basic_istream<wchar_t, std::char_traits<wchar_t> >&,
std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
>&)
More information about the Gcc-bugs
mailing list