This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/28597] New: friend function defined inside class declaration


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]