// { dg-do assemble } // GROUPS passed visibility // Used to say: // manip.cc:17: member `_f' is a private member of class `B' // manip.cc:17: member `_a' is a private member of class `B' class A {}; template class B; template inline A & operator<< (A &o, const B &m); template class B { A &(*_f) (A &, TP); TP _a; public: B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {} friend A &operator<< <>(A &o, const B &m); }; template inline A & operator<< (A &o, const B &m) { (*m._f) (o, m._a); return o; } A &setw (A &, int); B setw (int n) { return B (setw, n); } A x; void f () { x << setw (2); }