A friend
объявление функции в локальном классе все еще полезно для специализации шаблона функции.Это верно только в C ++ 11, поскольку в C ++ 03 локальные типы не могут быть аргументами шаблона.
template< typename t >
int bar( t &o ) {
return ++ o.x;
}
int main()
{
class MyClass
{
int x;
friend int bar<>( MyClass &o );
public:
MyClass() : x( 0 ) {}
};
MyClass m;
std::cout << bar( m ) << ", " << bar( m ) << '\n';
}
http://ideone.com/vcuml
В противном случае, я не вижу, как это такдекларации могут выполнить все.