// { dg-do assemble } // Bug: member operator shadows global template in tsubst. class ostream; template class smanip; template ostream& operator<<(ostream& o, const smanip& m); template class smanip { public: friend ostream& operator<< <>(ostream &o, const smanip&m); }; template ostream& operator<<(ostream& o, const smanip& 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 smd; os << smd; // { dg-bogus "" } }