When defining a friend function in a template class it does not get correctly
defined if the class instantiation comes after the function has been already
called. Note: this happens even if you pre-declare the function in its correct
context before the same function is called.
The following is a code sample that reproduces the bug. Note that this has been
already discussed and concluded that this is valid c++ standard-compliant code
(precisely here:
http://groups.google.com/group/comp.lang.c++/browse_frm/thread/493afd501c807ffe#).
-- code --
void Function();
int main(int argc, char* argv[])
{
Function(); // This does not work
}
template <typename T>
class Test
{
public:
friend void Function() { printf("Function()"); getchar(); }
};
template class Test<int>;
-- end code --
--
Summary: Template friend function injection
Product: gcc
Version: 4.2.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: H9XLrv5oXVNvHiUI at spambox dot us
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38392