[Bug 199114] operator << (ostream &, const string &) linker problem

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Thu Apr 2 14:46:44 UTC 2015


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=199114

            Bug ID: 199114
           Summary: operator << (ostream &, const string &) linker problem
           Product: Base System
           Version: 11.0-CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: standards
          Assignee: freebsd-standards at FreeBSD.org
          Reporter: hartmut.brandt at dlr.de

<string> forward declares a template for the output operator, but this template
is nowhere defined. Instead <ostream> provides an inline definition for that
template. This leads to the following program not linking:

x.cc
---
#include <iostream>

void foo(std::ostream &);

int main() {
  foo(std::cout);
}

y.cc
---
#include <string>
#include <iosfwd>

void foo(std::ostream &os)
{
  os << std::string("a");
}

The linker will give an undefined symbol for the operator <<. The reason is
that <string> forward declares the template which is not defined neither in
<string> nor in the librarie's string.cc. Because of the forward declaration
y.cc happily compiles with an undefined reference in the obj-file.

When including <ostream> in y.cc, the linker is successful since there is a
inline template definition in <ostream>. According to my reading of the
standard this is wrong - the defintion should be in <string> or string.cc
should have an instantiation of the template for char and wchar_t.

This is probably an upstream issue?

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-standards mailing list