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