// { dg-do assemble } // Bug: member operator shadows global template in tsubst. class ostream; template <class TP> class smanip; template<class TP> ostream& operator<<(ostream& o, const smanip<TP>& m); template <class TP> class smanip { public: friend ostream& operator<< <>(ostream &o, const smanip<TP>&m); }; template<class TP> ostream& operator<<(ostream& o, const smanip<TP>& m) { return o;} class X { public: X operator<<(int); // commenting out this line makes it work! void print(ostream& os); }; void X::print(ostream& os) { smanip<double> smd; os << smd; // { dg-bogus "" } }