This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/28597] New: friend function defined inside class declaration
- From: "nathanbates99 at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Aug 2006 01:38:30 -0000
- Subject: [Bug c++/28597] New: friend function defined inside class declaration
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
When a friend function is defined in inside a class,
and then passed to a STL algorithm function,
gcc 4.1 reports it can't find the friend function.
gcc 4.0 and gcc 3.4.4 will compile the following code snippet.
gcc 4.1.0 (Fedora 5 x86-64) won't compile, it returns this error message.
friend_gcc4_bug.cc: In function ?int main(int, char**)?:
friend_gcc4_bug.cc:32: error: ?Compare? was not declared in this scope
But gcc 4.1.0 will compile it if the friend is defined
outside the class, rather than inside.
friend_gcc4_bug.cc:
-------------------
#include <iostream>
#include <vector>
#include <algorithm>
#define FRIEND_IN_CLASS 1
class Class
{
private:
int mVal;
#if FRIEND_IN_CLASS
friend bool Compare( const Class& a, const Class& b )
{
return a.mVal < b.mVal;
}
#else
friend bool Compare( const Class& a, const Class& b );
#endif
};
#if ! FRIEND_IN_CLASS
bool Compare( const Class& a, const Class& b )
{
return a.mVal < b.mVal;
}
#endif
int main( int argc, char** argv )
{
std::vector<Class> vec;
std::sort( vec.begin(), vec.end(), Compare );
std::nth_element( vec.begin(), vec.begin(), vec.end(), Compare );
std::search( vec.begin(), vec.end(),
vec.begin(), vec.end(), Compare );
Class a, b;
Compare( a, b );
}
--
Summary: friend function defined inside class declaration
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: nathanbates99 at yahoo dot com
GCC build triplet: x86_64-redhat-linux
GCC host triplet: x86_64-redhat-linux
GCC target triplet: x86_64-redhat-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28597