// { dg-do assemble } // GROUPS passed conversions class A {}; 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) { (*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); }