In case you don’t know how to befriend all instances of a template class:
#include <iostream>
using namespace std;
class Foo {
public:
Foo(int v) : v(v) {}
private:
template<typename T> friend class Bar; // magic incantation
int v;
};
template<typename T>
class Bar {
public:
static int get(Foo& f) {
return f.v;
}
};
int main() {
Foo f(42);
cout << Bar<int>::get(f) << endl;
return 0;
}
This also works to befriend template functions and operators. It is not supported by MSVC6, however.