When I do the following:
template <typename T>
class Container
{
public:
    class Iterator
    {
        friend bool operator==(const Iterator& x, const Iterator& y);
    };
};
gcc gives me the following warning and suggestion:
warning: friend declaration 
'bool operator==(const Container<T>::Iterator&, 
                 const Container<T>::Iterator&)' 
declares a non-template function [-Wnon-template-friend]
friend bool operator==(const Iterator& x, const Iterator& y);
                                                           ^
(if this is not what you intended, 
 make sure the function template has already been declared 
 and add <> after the function name here)
I am fairly sure that this is a new warning, since I have always done it like this and never had any problems.
Can someone please explain why is this a warning, and what it warns about?
 
     
    