1// { dg-do assemble } 2// GROUPS passed visibility 3// Used to say: 4// manip.cc:17: member `_f' is a private member of class `B<int>' 5// manip.cc:17: member `_a' is a private member of class `B<int>' 6 7class A {}; 8 9template <class TP> 10class B; 11 12template <class TP> 13inline A & 14operator<< (A &o, const B<TP> &m); 15 16template <class TP> 17class B 18{ 19 A &(*_f) (A &, TP); 20 TP _a; 21public: 22 B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {} 23 friend A &operator<< <>(A &o, const B<TP> &m); 24}; 25 26template <class TP> 27inline A & 28operator<< (A &o, const B<TP> &m) 29{ 30 (*m._f) (o, m._a); 31 return o; 32} 33 34A &setw (A &, int); 35B<int> setw (int n) 36{ 37 return B<int> (setw, n); 38} 39 40A x; 41 42void f () 43{ 44 x << setw (2); 45} 46